﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using UndertaleModLib.Models;
using static UndertaleModLib.Models.UndertaleGeneralInfo;


// HUGE file containing definitions for most GameMaker builtin variables, functions, etc.


namespace UndertaleModLib.Compiler
{
    public class VariableInfo
    {
        public int ID; // Nothing special, just increments?
        public string SetterFunction;
        public string GetterFunction;
        public bool CanGet;
        public bool CanSet;

        public VariableInfo()
        {

        }

        public VariableInfo(BuiltinList list, bool canGet, bool canSet)
        {
            CanGet = canGet;
            CanSet = canSet;

            ID = list.CurrentID++;
        }

        public VariableInfo(BuiltinList list, bool canGet, bool canSet, string setterFunction)
        {
            CanGet = canGet;
            CanSet = canSet;
            SetterFunction = setterFunction;

            ID = list.CurrentID++;
        }

        public VariableInfo(BuiltinList list, bool canGet, bool canSet, string setterFunction, string getterFunction)
        {
            CanGet = canGet;
            CanSet = canSet;
            SetterFunction = setterFunction;
            GetterFunction = getterFunction;

            ID = list.CurrentID++;
        }
    }

    public class FunctionInfo
    {
        public int ArgumentCount;
        public bool IsFirstParamInstance = false;
        public bool IsFirstParamOther = false;
        public int ID;
        public FunctionClassification Classification = FunctionClassification.None;

        public FunctionInfo(BuiltinList list, int argumentCount)
        {
            ArgumentCount = argumentCount;
            ID = list.CurrentID++;
        }

        public FunctionInfo(BuiltinList list, int argumentCount, FunctionClassification classification) : this(list, argumentCount)
        {
            Classification = classification;
            // Maybe handle this differently? (look UndertaleFunction.cs)
        }

        public FunctionInfo(BuiltinList list, int argumentCount, bool isFirstParamInstance)
        {
            ArgumentCount = argumentCount;
            IsFirstParamInstance = isFirstParamInstance;
            ID = list.CurrentID++;
        }

        public FunctionInfo(BuiltinList list, int argumentCount, bool isFirstParamInstance, bool isFirstParamOther)
        {
            ArgumentCount = argumentCount;
            IsFirstParamInstance = isFirstParamInstance;
            IsFirstParamOther = isFirstParamOther;
            ID = list.CurrentID++;
        }
    }

    public class AccessorInfo
    {
        public string LFunc;
        public string LPreFunc;
        public string LPostFunc;
        public string RFunc;

        public AccessorInfo(string lFunc, string lPreFunc, string lPostFunc, string rFunc)
        {
            LFunc = lFunc;
            LPreFunc = lPreFunc;
            LPostFunc = lPostFunc;
            RFunc = rFunc;
        }
    }

    /// <summary>
    /// A really long list of known Game Maker: Studio constants and variables, taken from code analysis. <br/>
    /// Will likely need to be updated on every new Game Maker version with new features.
    /// </summary>
    public class BuiltinList
    {
        public Dictionary<string, double> Constants = null;
        public Dictionary<string, VariableInfo> GlobalNotArray = null;
        public Dictionary<string, VariableInfo> GlobalArray = null;
        public Dictionary<string, VariableInfo> Instance = null;
        public Dictionary<string, VariableInfo> InstanceLimitedEvent = null;
        public Dictionary<string, FunctionInfo> Functions = null;
        public Dictionary<Compiler.Lexer.Token.TokenKind, AccessorInfo> Accessors1D = null;
        public Dictionary<Compiler.Lexer.Token.TokenKind, AccessorInfo> Accessors2D = null;

        public int CurrentID = 0;
        public int ArgumentID = 0;
        public int Argument0ID = 0;
        public int Argument15ID = 0;

        public BuiltinList() {
            Initialize(null);
        }

        public BuiltinList(UndertaleData data)
        {
            Initialize(data);
        }

        public void Initialize(UndertaleData data)
        {
            // Functions
            Functions = new Dictionary<string, FunctionInfo>();
            Functions["matrix_get"] = new FunctionInfo(this, 1);
            Functions["matrix_set"] = new FunctionInfo(this, 2);
            Functions["matrix_build"] = new FunctionInfo(this, 9);
            Functions["matrix_build_lookat"] = new FunctionInfo(this, 9);
            Functions["matrix_build_identity"] = new FunctionInfo(this, 0);
            Functions["matrix_build_projection_ortho"] = new FunctionInfo(this, 4);
            Functions["matrix_build_projection_perspective"] = new FunctionInfo(this, 4);
            Functions["matrix_build_projection_perspective_fov"] = new FunctionInfo(this, 4);
            Functions["matrix_multiply"] = new FunctionInfo(this, 2);
            Functions["matrix_transform_vertex"] = new FunctionInfo(this, 4);
            Functions["matrix_stack_push"] = new FunctionInfo(this, -1);
            Functions["matrix_stack_pop"] = new FunctionInfo(this, 0);
            Functions["matrix_stack_set"] = new FunctionInfo(this, 1);
            Functions["matrix_stack_clear"] = new FunctionInfo(this, 0);
            Functions["matrix_stack_top"] = new FunctionInfo(this, 0);
            Functions["matrix_stack_is_empty"] = new FunctionInfo(this, 0);
            if (data?.GeneralInfo?.Major < 2)
            {
                Functions["d3d_start"] = new FunctionInfo(this, 0);
                Functions["d3d_end"] = new FunctionInfo(this, 0);
                Functions["d3d_set_perspective"] = new FunctionInfo(this, 1);
                Functions["d3d_set_hidden"] = new FunctionInfo(this, 1);
                Functions["d3d_set_depth"] = new FunctionInfo(this, 1);
                Functions["d3d_set_shading"] = new FunctionInfo(this, 1);
                Functions["d3d_set_fog"] = new FunctionInfo(this, 4);
                Functions["d3d_set_culling"] = new FunctionInfo(this, 1);
                Functions["d3d_set_zwriteenable"] = new FunctionInfo(this, 1);
                Functions["d3d_set_projection"] = new FunctionInfo(this, 9);
                Functions["d3d_set_projection_ext"] = new FunctionInfo(this, 13);
                Functions["d3d_set_projection_ortho"] = new FunctionInfo(this, 5);
                Functions["d3d_set_projection_perspective"] = new FunctionInfo(this, 5);
                Functions["d3d_transform_set_identity"] = new FunctionInfo(this, 0);
                Functions["d3d_transform_set_translation"] = new FunctionInfo(this, 3);
                Functions["d3d_transform_set_scaling"] = new FunctionInfo(this, 3);
                Functions["d3d_transform_set_rotation_x"] = new FunctionInfo(this, 1);
                Functions["d3d_transform_set_rotation_y"] = new FunctionInfo(this, 1);
                Functions["d3d_transform_set_rotation_z"] = new FunctionInfo(this, 1);
                Functions["d3d_transform_set_rotation_axis"] = new FunctionInfo(this, 4);
                Functions["d3d_transform_add_translation"] = new FunctionInfo(this, 3);
                Functions["d3d_transform_add_scaling"] = new FunctionInfo(this, 3);
                Functions["d3d_transform_add_rotation_x"] = new FunctionInfo(this, 1);
                Functions["d3d_transform_add_rotation_y"] = new FunctionInfo(this, 1);
                Functions["d3d_transform_add_rotation_z"] = new FunctionInfo(this, 1);
                Functions["d3d_transform_add_rotation_axis"] = new FunctionInfo(this, 4);
                Functions["d3d_transform_stack_clear"] = new FunctionInfo(this, 0);
                Functions["d3d_transform_stack_empty"] = new FunctionInfo(this, 0);
                Functions["d3d_transform_stack_push"] = new FunctionInfo(this, 0);
                Functions["d3d_transform_stack_pop"] = new FunctionInfo(this, 0);
                Functions["d3d_transform_stack_top"] = new FunctionInfo(this, 0);
                Functions["d3d_transform_stack_discard"] = new FunctionInfo(this, 0);
                Functions["d3d_transform_vertex"] = new FunctionInfo(this, 3);
                Functions["d3d_primitive_begin"] = new FunctionInfo(this, 1);
                Functions["d3d_primitive_begin_texture"] = new FunctionInfo(this, 2);
                Functions["d3d_primitive_end"] = new FunctionInfo(this, 0);
                Functions["d3d_vertex"] = new FunctionInfo(this, 3);
                Functions["d3d_vertex_color"] = new FunctionInfo(this, 5);
                Functions["d3d_vertex_colour"] = new FunctionInfo(this, 5);
                Functions["d3d_vertex_texture"] = new FunctionInfo(this, 5);
                Functions["d3d_vertex_texture_color"] = new FunctionInfo(this, 7);
                Functions["d3d_vertex_texture_colour"] = new FunctionInfo(this, 7);
                Functions["d3d_vertex_normal"] = new FunctionInfo(this, 6);
                Functions["d3d_vertex_normal_color"] = new FunctionInfo(this, 8);
                Functions["d3d_vertex_normal_colour"] = new FunctionInfo(this, 8);
                Functions["d3d_vertex_normal_texture"] = new FunctionInfo(this, 8);
                Functions["d3d_vertex_normal_texture_color"] = new FunctionInfo(this, 10);
                Functions["d3d_vertex_normal_texture_colour"] = new FunctionInfo(this, 10);
                Functions["d3d_draw_block"] = new FunctionInfo(this, 9);
                Functions["d3d_draw_cylinder"] = new FunctionInfo(this, 11);
                Functions["d3d_draw_cone"] = new FunctionInfo(this, 11);
                Functions["d3d_draw_ellipsoid"] = new FunctionInfo(this, 10);
                Functions["d3d_draw_wall"] = new FunctionInfo(this, 9);
                Functions["d3d_draw_floor"] = new FunctionInfo(this, 9);
                Functions["d3d_model_create"] = new FunctionInfo(this, 0);
                Functions["d3d_model_destroy"] = new FunctionInfo(this, 1);
                Functions["d3d_model_clear"] = new FunctionInfo(this, 1);
                Functions["d3d_model_load"] = new FunctionInfo(this, 2);
                Functions["d3d_model_save"] = new FunctionInfo(this, 2);
                Functions["d3d_model_load_buffer"] = new FunctionInfo(this, 2);
                Functions["d3d_model_save_buffer"] = new FunctionInfo(this, 2);
                Functions["d3d_model_draw"] = new FunctionInfo(this, 5);
                Functions["d3d_model_primitive_begin"] = new FunctionInfo(this, 2);
                Functions["d3d_model_primitive_end"] = new FunctionInfo(this, 1);
                Functions["d3d_model_vertex"] = new FunctionInfo(this, 4);
                Functions["d3d_model_vertex_color"] = new FunctionInfo(this, 6);
                Functions["d3d_model_vertex_colour"] = new FunctionInfo(this, 6);
                Functions["d3d_model_vertex_texture"] = new FunctionInfo(this, 6);
                Functions["d3d_model_vertex_texture_color"] = new FunctionInfo(this, 8);
                Functions["d3d_model_vertex_texture_colour"] = new FunctionInfo(this, 8);
                Functions["d3d_model_vertex_normal"] = new FunctionInfo(this, 7);
                Functions["d3d_model_vertex_normal_color"] = new FunctionInfo(this, 9);
                Functions["d3d_model_vertex_normal_colour"] = new FunctionInfo(this, 9);
                Functions["d3d_model_vertex_normal_texture"] = new FunctionInfo(this, 9);
                Functions["d3d_model_vertex_normal_texture_color"] = new FunctionInfo(this, 11);
                Functions["d3d_model_vertex_normal_texture_colour"] = new FunctionInfo(this, 11);
                Functions["d3d_model_block"] = new FunctionInfo(this, 9);
                Functions["d3d_model_cylinder"] = new FunctionInfo(this, 11);
                Functions["d3d_model_cone"] = new FunctionInfo(this, 11);
                Functions["d3d_model_ellipsoid"] = new FunctionInfo(this, 10);
                Functions["d3d_model_wall"] = new FunctionInfo(this, 9);
                Functions["d3d_model_floor"] = new FunctionInfo(this, 9);
                Functions["d3d_light_define_ambient"] = new FunctionInfo(this, 1);
                Functions["d3d_light_define_direction"] = new FunctionInfo(this, 5);
                Functions["d3d_light_define_point"] = new FunctionInfo(this, 6);
                Functions["d3d_light_enable"] = new FunctionInfo(this, 2);
                Functions["d3d_set_lighting"] = new FunctionInfo(this, 1);
            }
            if (data?.GeneralInfo?.Major < 2)
            {
                Functions["action_path_old"] = new FunctionInfo(this, 3);
                Functions["action_set_sprite"] = new FunctionInfo(this, 2, true);
                Functions["action_draw_font"] = new FunctionInfo(this, 1);
                Functions["action_draw_font_old"] = new FunctionInfo(this, 6);
                Functions["action_fill_color"] = new FunctionInfo(this, 1);
                Functions["action_fill_colour"] = new FunctionInfo(this, 1);
                Functions["action_line_color"] = new FunctionInfo(this, 1);
                Functions["action_line_colour"] = new FunctionInfo(this, 1);
                Functions["action_highscore"] = new FunctionInfo(this, 0);
                Functions["action_set_relative"] = new FunctionInfo(this, 1);
                Functions["action_move"] = new FunctionInfo(this, 2, true);
                Functions["action_set_motion"] = new FunctionInfo(this, 2, true);
                Functions["action_set_hspeed"] = new FunctionInfo(this, 1, true);
                Functions["action_set_vspeed"] = new FunctionInfo(this, 1, true);
                Functions["action_set_gravity"] = new FunctionInfo(this, 2, true);
                Functions["action_set_friction"] = new FunctionInfo(this, 1, true);
                Functions["action_move_point"] = new FunctionInfo(this, 3, true);
                Functions["action_move_to"] = new FunctionInfo(this, 2, true);
                Functions["action_move_start"] = new FunctionInfo(this, 0, true);
                Functions["action_move_random"] = new FunctionInfo(this, 2, true);
                Functions["action_snap"] = new FunctionInfo(this, 2, true);
                Functions["action_wrap"] = new FunctionInfo(this, 1, true);
                Functions["action_reverse_xdir"] = new FunctionInfo(this, 0, true);
                Functions["action_reverse_ydir"] = new FunctionInfo(this, 0, true);
                Functions["action_move_contact"] = new FunctionInfo(this, 3, true);
                Functions["action_bounce"] = new FunctionInfo(this, 2, true);
                Functions["action_path"] = new FunctionInfo(this, 4, true);
                Functions["action_path_end"] = new FunctionInfo(this, 0, true);
                Functions["action_path_position"] = new FunctionInfo(this, 1, true);
                Functions["action_path_speed"] = new FunctionInfo(this, 1, true);
                Functions["action_linear_step"] = new FunctionInfo(this, 4, true);
                Functions["action_potential_step"] = new FunctionInfo(this, 4, true);
                Functions["action_kill_object"] = new FunctionInfo(this, 0, true);
                Functions["action_create_object"] = new FunctionInfo(this, 3, true);
                Functions["action_create_object_motion"] = new FunctionInfo(this, 5, true);
                Functions["action_create_object_random"] = new FunctionInfo(this, 6, true);
                Functions["action_change_object"] = new FunctionInfo(this, 2, true);
                Functions["action_kill_position"] = new FunctionInfo(this, 2, true);
                Functions["action_sprite_set"] = new FunctionInfo(this, 3, true);
                Functions["action_sprite_transform"] = new FunctionInfo(this, 4, true);
                Functions["action_sprite_color"] = new FunctionInfo(this, 2, true);
                Functions["action_sprite_colour"] = new FunctionInfo(this, 2, true);
                Functions["action_sound"] = new FunctionInfo(this, 2);
                Functions["action_end_sound"] = new FunctionInfo(this, 1);
                Functions["action_if_sound"] = new FunctionInfo(this, 1);
                Functions["action_another_room"] = new FunctionInfo(this, 1);
                Functions["action_current_room"] = new FunctionInfo(this, 0);
                Functions["action_previous_room"] = new FunctionInfo(this, 0);
                Functions["action_next_room"] = new FunctionInfo(this, 0);
                Functions["action_if_previous_room"] = new FunctionInfo(this, 0);
                Functions["action_if_next_room"] = new FunctionInfo(this, 0);
                Functions["action_set_alarm"] = new FunctionInfo(this, 2, true);
                Functions["action_sleep"] = new FunctionInfo(this, 2);
                Functions["action_set_timeline"] = new FunctionInfo(this, 2, true);
                Functions["action_timeline_set"] = new FunctionInfo(this, 4, true);
                Functions["action_timeline_start"] = new FunctionInfo(this, 0, true);
                Functions["action_timeline_stop"] = new FunctionInfo(this, 0, true);
                Functions["action_timeline_pause"] = new FunctionInfo(this, 0, true);
                Functions["action_set_timeline_position"] = new FunctionInfo(this, 1, true);
                Functions["action_set_timeline_speed"] = new FunctionInfo(this, 1, true);
                Functions["action_message"] = new FunctionInfo(this, 1);
                Functions["action_show_info"] = new FunctionInfo(this, 0);
                Functions["action_show_video"] = new FunctionInfo(this, 3);
                Functions["action_end_game"] = new FunctionInfo(this, 0);
                Functions["action_restart_game"] = new FunctionInfo(this, 0);
                Functions["action_save_game"] = new FunctionInfo(this, 1);
                Functions["action_load_game"] = new FunctionInfo(this, 1);
                Functions["action_replace_sprite"] = new FunctionInfo(this, 3);
                Functions["action_replace_sound"] = new FunctionInfo(this, 2);
                Functions["action_replace_background"] = new FunctionInfo(this, 2);
                Functions["action_if_empty"] = new FunctionInfo(this, 3, true);
                Functions["action_if_collision"] = new FunctionInfo(this, 3, true);
                Functions["action_if"] = new FunctionInfo(this, 1);
                Functions["action_if_number"] = new FunctionInfo(this, 3);
                Functions["action_if_object"] = new FunctionInfo(this, 3, true);
                Functions["action_if_question"] = new FunctionInfo(this, 1);
                Functions["action_if_dice"] = new FunctionInfo(this, 1);
                Functions["action_if_mouse"] = new FunctionInfo(this, 1);
                Functions["action_if_aligned"] = new FunctionInfo(this, 2, true);
                Functions["action_execute_script"] = new FunctionInfo(this, 6, true);
                Functions["action_inherited"] = new FunctionInfo(this, 0, true, true);
                Functions["action_if_variable"] = new FunctionInfo(this, 3);
                Functions["action_draw_variable"] = new FunctionInfo(this, 3, true);
                Functions["action_set_score"] = new FunctionInfo(this, 1);
                Functions["action_if_score"] = new FunctionInfo(this, 2);
                Functions["action_draw_score"] = new FunctionInfo(this, 3, true);
                Functions["action_highscore_show"] = new FunctionInfo(this, 11);
                Functions["action_highscore_clear"] = new FunctionInfo(this, 0);
                Functions["action_set_life"] = new FunctionInfo(this, 1);
                Functions["action_if_life"] = new FunctionInfo(this, 2);
                Functions["action_draw_life"] = new FunctionInfo(this, 3, true);
                Functions["action_draw_life_images"] = new FunctionInfo(this, 3, true);
                Functions["action_set_health"] = new FunctionInfo(this, 1, true);
                Functions["action_if_health"] = new FunctionInfo(this, 2, true);
                Functions["action_draw_health"] = new FunctionInfo(this, 6, true);
                Functions["action_set_caption"] = new FunctionInfo(this, 6);
                Functions["action_partsyst_create"] = new FunctionInfo(this, 1);
                Functions["action_partsyst_destroy"] = new FunctionInfo(this, 0);
                Functions["action_partsyst_clear"] = new FunctionInfo(this, 0);
                Functions["action_parttype_create_old"] = new FunctionInfo(this, 6);
                Functions["action_parttype_create"] = new FunctionInfo(this, 6);
                Functions["action_parttype_color"] = new FunctionInfo(this, 6);
                Functions["action_parttype_colour"] = new FunctionInfo(this, 6);
                Functions["action_parttype_life"] = new FunctionInfo(this, 3);
                Functions["action_parttype_speed"] = new FunctionInfo(this, 6);
                Functions["action_parttype_gravity"] = new FunctionInfo(this, 3);
                Functions["action_parttype_secondary"] = new FunctionInfo(this, 5);
                Functions["action_partemit_create"] = new FunctionInfo(this, 6);
                Functions["action_partemit_destroy"] = new FunctionInfo(this, 1);
                Functions["action_partemit_burst"] = new FunctionInfo(this, 3);
                Functions["action_partemit_stream"] = new FunctionInfo(this, 3);
                Functions["action_cd_play"] = new FunctionInfo(this, 2);
                Functions["action_cd_stop"] = new FunctionInfo(this, 0);
                Functions["action_cd_pause"] = new FunctionInfo(this, 0);
                Functions["action_cd_resume"] = new FunctionInfo(this, 0);
                Functions["action_cd_present"] = new FunctionInfo(this, 0);
                Functions["action_cd_playing"] = new FunctionInfo(this, 0);
                Functions["action_set_cursor"] = new FunctionInfo(this, 2);
                Functions["action_webpage"] = new FunctionInfo(this, 1);
                Functions["action_splash_web"] = new FunctionInfo(this, 1);
                Functions["action_draw_sprite"] = new FunctionInfo(this, 4, true);
                Functions["action_draw_background"] = new FunctionInfo(this, 4, true);
                Functions["action_draw_text"] = new FunctionInfo(this, 3, true);
                Functions["action_draw_text_transformed"] = new FunctionInfo(this, 6, true);
                Functions["action_draw_rectangle"] = new FunctionInfo(this, 5, true);
                Functions["action_draw_gradient_hor"] = new FunctionInfo(this, 6, true);
                Functions["action_draw_gradient_vert"] = new FunctionInfo(this, 6, true);
                Functions["action_draw_ellipse"] = new FunctionInfo(this, 5, true);
                Functions["action_draw_ellipse_gradient"] = new FunctionInfo(this, 6, true);
                Functions["action_draw_line"] = new FunctionInfo(this, 4, true);
                Functions["action_draw_arrow"] = new FunctionInfo(this, 5, true);
                Functions["action_color"] = new FunctionInfo(this, 1);
                Functions["action_colour"] = new FunctionInfo(this, 1);
                Functions["action_font"] = new FunctionInfo(this, 2);
                Functions["action_fullscreen"] = new FunctionInfo(this, 1);
                Functions["action_snapshot"] = new FunctionInfo(this, 1);
                Functions["action_effect"] = new FunctionInfo(this, 6, true);
            }
            Functions["ds_set_precision"] = new FunctionInfo(this, 1);
            Functions["ds_exists"] = new FunctionInfo(this, 2);
            Functions["ds_stack_create"] = new FunctionInfo(this, 0);
            Functions["ds_stack_destroy"] = new FunctionInfo(this, 1);
            Functions["ds_stack_clear"] = new FunctionInfo(this, 1);
            Functions["ds_stack_copy"] = new FunctionInfo(this, 2);
            Functions["ds_stack_size"] = new FunctionInfo(this, 1);
            Functions["ds_stack_empty"] = new FunctionInfo(this, 1);
            Functions["ds_stack_push"] = new FunctionInfo(this, -1);
            Functions["ds_stack_pop"] = new FunctionInfo(this, 1);
            Functions["ds_stack_top"] = new FunctionInfo(this, 1);
            Functions["ds_stack_write"] = new FunctionInfo(this, 1);
            Functions["ds_stack_read"] = new FunctionInfo(this, -1);
            Functions["ds_queue_create"] = new FunctionInfo(this, 0);
            Functions["ds_queue_destroy"] = new FunctionInfo(this, 1);
            Functions["ds_queue_clear"] = new FunctionInfo(this, 1);
            Functions["ds_queue_copy"] = new FunctionInfo(this, 2);
            Functions["ds_queue_size"] = new FunctionInfo(this, 1);
            Functions["ds_queue_empty"] = new FunctionInfo(this, 1);
            Functions["ds_queue_enqueue"] = new FunctionInfo(this, -1);
            Functions["ds_queue_dequeue"] = new FunctionInfo(this, 1);
            Functions["ds_queue_head"] = new FunctionInfo(this, 1);
            Functions["ds_queue_tail"] = new FunctionInfo(this, 1);
            Functions["ds_queue_write"] = new FunctionInfo(this, 1);
            Functions["ds_queue_read"] = new FunctionInfo(this, -1);
            Functions["ds_list_create"] = new FunctionInfo(this, 0);
            Functions["ds_list_destroy"] = new FunctionInfo(this, 1);
            Functions["ds_list_clear"] = new FunctionInfo(this, 1);
            Functions["ds_list_copy"] = new FunctionInfo(this, 2);
            Functions["ds_list_size"] = new FunctionInfo(this, 1);
            Functions["ds_list_empty"] = new FunctionInfo(this, 1);
            Functions["ds_list_add"] = new FunctionInfo(this, -1);
            Functions["ds_list_insert"] = new FunctionInfo(this, 3);
            Functions["ds_list_replace"] = new FunctionInfo(this, 3);
            Functions["ds_list_delete"] = new FunctionInfo(this, 2);
            Functions["ds_list_find_index"] = new FunctionInfo(this, 2);
            Functions["ds_list_find_value"] = new FunctionInfo(this, 2);
            Functions["ds_list_mark_as_list"] = new FunctionInfo(this, 2);
            Functions["ds_list_mark_as_map"] = new FunctionInfo(this, 2);
            Functions["ds_list_sort"] = new FunctionInfo(this, 2);
            Functions["ds_list_shuffle"] = new FunctionInfo(this, 1);
            Functions["ds_list_write"] = new FunctionInfo(this, 1);
            Functions["ds_list_read"] = new FunctionInfo(this, -1);
            Functions["ds_list_set"] = new FunctionInfo(this, 3);
            Functions["ds_list_set_pre"] = new FunctionInfo(this, 3);
            Functions["ds_list_set_post"] = new FunctionInfo(this, 3);
            Functions["ds_map_create"] = new FunctionInfo(this, 0);
            Functions["ds_map_destroy"] = new FunctionInfo(this, 1);
            Functions["ds_map_clear"] = new FunctionInfo(this, 1);
            Functions["ds_map_copy"] = new FunctionInfo(this, 2);
            Functions["ds_map_size"] = new FunctionInfo(this, 1);
            Functions["ds_map_empty"] = new FunctionInfo(this, 1);
            Functions["ds_map_add"] = new FunctionInfo(this, 3);
            Functions["ds_map_add_list"] = new FunctionInfo(this, 3);
            Functions["ds_map_add_map"] = new FunctionInfo(this, 3);
            Functions["ds_map_replace"] = new FunctionInfo(this, 3);
            Functions["ds_map_replace_list"] = new FunctionInfo(this, 3);
            Functions["ds_map_replace_map"] = new FunctionInfo(this, 3);
            Functions["ds_map_delete"] = new FunctionInfo(this, 2);
            Functions["ds_map_exists"] = new FunctionInfo(this, 2);
            Functions["ds_map_find_value"] = new FunctionInfo(this, 2);
            Functions["ds_map_find_previous"] = new FunctionInfo(this, 2);
            Functions["ds_map_find_next"] = new FunctionInfo(this, 2);
            Functions["ds_map_find_first"] = new FunctionInfo(this, 1);
            Functions["ds_map_find_last"] = new FunctionInfo(this, 1);
            Functions["ds_map_write"] = new FunctionInfo(this, 1);
            Functions["ds_map_read"] = new FunctionInfo(this, -1);
            Functions["ds_map_secure_save"] = new FunctionInfo(this, 2);
            Functions["ds_map_secure_load"] = new FunctionInfo(this, 1);
            Functions["ds_map_secure_load_buffer"] = new FunctionInfo(this, 1);
            Functions["ds_map_secure_save_buffer"] = new FunctionInfo(this, 2);
            Functions["ds_map_set"] = new FunctionInfo(this, 3);
            Functions["ds_map_set_pre"] = new FunctionInfo(this, 3);
            Functions["ds_map_set_post"] = new FunctionInfo(this, 3);
            Functions["ds_priority_create"] = new FunctionInfo(this, 0);
            Functions["ds_priority_destroy"] = new FunctionInfo(this, 1);
            Functions["ds_priority_clear"] = new FunctionInfo(this, 1);
            Functions["ds_priority_copy"] = new FunctionInfo(this, 2, true);
            Functions["ds_priority_size"] = new FunctionInfo(this, 1);
            Functions["ds_priority_empty"] = new FunctionInfo(this, 1);
            Functions["ds_priority_add"] = new FunctionInfo(this, 3);
            Functions["ds_priority_change_priority"] = new FunctionInfo(this, 3);
            Functions["ds_priority_find_priority"] = new FunctionInfo(this, 2);
            Functions["ds_priority_delete_value"] = new FunctionInfo(this, 2);
            Functions["ds_priority_delete_min"] = new FunctionInfo(this, 1);
            Functions["ds_priority_find_min"] = new FunctionInfo(this, 1);
            Functions["ds_priority_delete_max"] = new FunctionInfo(this, 1);
            Functions["ds_priority_find_max"] = new FunctionInfo(this, 1);
            Functions["ds_priority_write"] = new FunctionInfo(this, 1);
            Functions["ds_priority_read"] = new FunctionInfo(this, -1);
            Functions["ds_grid_create"] = new FunctionInfo(this, 2);
            Functions["ds_grid_destroy"] = new FunctionInfo(this, 1);
            Functions["ds_grid_copy"] = new FunctionInfo(this, 2);
            Functions["ds_grid_resize"] = new FunctionInfo(this, 3);
            Functions["ds_grid_width"] = new FunctionInfo(this, 1);
            Functions["ds_grid_height"] = new FunctionInfo(this, 1);
            Functions["ds_grid_clear"] = new FunctionInfo(this, 2);
            Functions["ds_grid_set"] = new FunctionInfo(this, 4);
            Functions["ds_grid_add"] = new FunctionInfo(this, 4);
            Functions["ds_grid_multiply"] = new FunctionInfo(this, 4);
            Functions["ds_grid_set_region"] = new FunctionInfo(this, 6);
            Functions["ds_grid_add_region"] = new FunctionInfo(this, 6);
            Functions["ds_grid_multiply_region"] = new FunctionInfo(this, 6);
            Functions["ds_grid_set_disk"] = new FunctionInfo(this, 5);
            Functions["ds_grid_add_disk"] = new FunctionInfo(this, 5);
            Functions["ds_grid_multiply_disk"] = new FunctionInfo(this, 5);
            Functions["ds_grid_set_grid_region"] = new FunctionInfo(this, 8);
            Functions["ds_grid_add_grid_region"] = new FunctionInfo(this, 8);
            Functions["ds_grid_multiply_grid_region"] = new FunctionInfo(this, 8);
            Functions["ds_grid_get"] = new FunctionInfo(this, 3);
            Functions["ds_grid_get_sum"] = new FunctionInfo(this, 5);
            Functions["ds_grid_get_max"] = new FunctionInfo(this, 5);
            Functions["ds_grid_get_min"] = new FunctionInfo(this, 5);
            Functions["ds_grid_get_mean"] = new FunctionInfo(this, 5);
            Functions["ds_grid_get_disk_sum"] = new FunctionInfo(this, 4);
            Functions["ds_grid_get_disk_max"] = new FunctionInfo(this, 4);
            Functions["ds_grid_get_disk_min"] = new FunctionInfo(this, 4);
            Functions["ds_grid_get_disk_mean"] = new FunctionInfo(this, 4);
            Functions["ds_grid_value_exists"] = new FunctionInfo(this, 6);
            Functions["ds_grid_value_x"] = new FunctionInfo(this, 6);
            Functions["ds_grid_value_y"] = new FunctionInfo(this, 6);
            Functions["ds_grid_value_disk_exists"] = new FunctionInfo(this, 5);
            Functions["ds_grid_value_disk_x"] = new FunctionInfo(this, 5);
            Functions["ds_grid_value_disk_y"] = new FunctionInfo(this, 5);
            Functions["ds_grid_shuffle"] = new FunctionInfo(this, 1);
            Functions["ds_grid_write"] = new FunctionInfo(this, 1);
            Functions["ds_grid_read"] = new FunctionInfo(this, -1);
            Functions["ds_grid_sort"] = new FunctionInfo(this, 3);
            Functions["ds_grid_set_pre"] = new FunctionInfo(this, 4);
            Functions["ds_grid_set_post"] = new FunctionInfo(this, 4);
            Functions["file_bin_open"] = new FunctionInfo(this, 2);
            Functions["file_bin_rewrite"] = new FunctionInfo(this, 1);
            Functions["file_bin_close"] = new FunctionInfo(this, 1);
            Functions["file_bin_position"] = new FunctionInfo(this, 1);
            Functions["file_bin_size"] = new FunctionInfo(this, 1);
            Functions["file_bin_seek"] = new FunctionInfo(this, 2);
            Functions["file_bin_read_byte"] = new FunctionInfo(this, 1);
            Functions["file_bin_write_byte"] = new FunctionInfo(this, 2);
            Functions["file_text_open_from_string"] = new FunctionInfo(this, 1);
            Functions["file_text_open_read"] = new FunctionInfo(this, 1);
            Functions["file_text_open_write"] = new FunctionInfo(this, 1);
            Functions["file_text_open_append"] = new FunctionInfo(this, 1);
            Functions["file_text_close"] = new FunctionInfo(this, 1);
            Functions["file_text_read_string"] = new FunctionInfo(this, 1);
            Functions["file_text_read_real"] = new FunctionInfo(this, 1);
            Functions["file_text_readln"] = new FunctionInfo(this, 1);
            Functions["file_text_eof"] = new FunctionInfo(this, 1);
            Functions["file_text_eoln"] = new FunctionInfo(this, 1);
            Functions["file_text_write_string"] = new FunctionInfo(this, 2);
            Functions["file_text_write_real"] = new FunctionInfo(this, 2);
            Functions["file_text_writeln"] = new FunctionInfo(this, 1);
            Functions["file_open_read"] = new FunctionInfo(this, 1);
            Functions["file_open_write"] = new FunctionInfo(this, 1);
            Functions["file_open_append"] = new FunctionInfo(this, 1);
            Functions["file_close"] = new FunctionInfo(this, 0);
            Functions["file_read_string"] = new FunctionInfo(this, 0);
            Functions["file_read_real"] = new FunctionInfo(this, 0);
            Functions["file_readln"] = new FunctionInfo(this, 0);
            Functions["file_eof"] = new FunctionInfo(this, 0);
            Functions["file_write_string"] = new FunctionInfo(this, 1);
            Functions["file_write_real"] = new FunctionInfo(this, 1);
            Functions["file_writeln"] = new FunctionInfo(this, 0);
            Functions["file_exists"] = new FunctionInfo(this, 1);
            Functions["file_delete"] = new FunctionInfo(this, 1);
            Functions["file_rename"] = new FunctionInfo(this, 2);
            Functions["file_copy"] = new FunctionInfo(this, 2);
            Functions["directory_exists"] = new FunctionInfo(this, 1);
            Functions["directory_create"] = new FunctionInfo(this, 1);
            Functions["directory_destroy"] = new FunctionInfo(this, 1);
            Functions["file_find_first"] = new FunctionInfo(this, 2);
            Functions["file_find_next"] = new FunctionInfo(this, 0);
            Functions["file_find_close"] = new FunctionInfo(this, 0);
            Functions["file_attributes"] = new FunctionInfo(this, 2);
            Functions["filename_name"] = new FunctionInfo(this, 1);
            Functions["filename_path"] = new FunctionInfo(this, 1);
            Functions["filename_dir"] = new FunctionInfo(this, 1);
            Functions["filename_drive"] = new FunctionInfo(this, 1);
            Functions["filename_ext"] = new FunctionInfo(this, 1);
            Functions["filename_change_ext"] = new FunctionInfo(this, 2);
            Functions["parameter_count"] = new FunctionInfo(this, 0);
            Functions["parameter_string"] = new FunctionInfo(this, 1);
            Functions["environment_get_variable"] = new FunctionInfo(this, 1);
            Functions["ini_open_from_string"] = new FunctionInfo(this, 1);
            Functions["ini_open"] = new FunctionInfo(this, 1);
            Functions["ini_close"] = new FunctionInfo(this, 0);
            Functions["ini_read_string"] = new FunctionInfo(this, 3);
            Functions["ini_read_real"] = new FunctionInfo(this, 3);
            Functions["ini_write_string"] = new FunctionInfo(this, 3);
            Functions["ini_write_real"] = new FunctionInfo(this, 3);
            Functions["ini_key_exists"] = new FunctionInfo(this, 2);
            Functions["ini_section_exists"] = new FunctionInfo(this, 1);
            Functions["ini_key_delete"] = new FunctionInfo(this, 2);
            Functions["ini_section_delete"] = new FunctionInfo(this, 1);
            Functions["http_post_string"] = new FunctionInfo(this, 2);
            Functions["http_get"] = new FunctionInfo(this, 1);
            Functions["http_get_file"] = new FunctionInfo(this, 2);
            Functions["http_request"] = new FunctionInfo(this, 4);
            Functions["json_encode"] = new FunctionInfo(this, 1);
            Functions["json_decode"] = new FunctionInfo(this, 1);
            Functions["zip_unzip"] = new FunctionInfo(this, 2);
            Functions["load_csv"] = new FunctionInfo(this, 1);
            Functions["move_random"] = new FunctionInfo(this, 2, true);
            Functions["place_free"] = new FunctionInfo(this, 2, true);
            Functions["place_empty"] = new FunctionInfo(this, -1, true);
            Functions["place_meeting"] = new FunctionInfo(this, 3, true);
            Functions["place_snapped"] = new FunctionInfo(this, 2, true);
            Functions["move_snap"] = new FunctionInfo(this, 2, true);
            Functions["move_towards_point"] = new FunctionInfo(this, 3, true);
            Functions["move_contact"] = new FunctionInfo(this, 1, true);
            Functions["move_contact_solid"] = new FunctionInfo(this, 2, true);
            Functions["move_contact_all"] = new FunctionInfo(this, 2, true);
            Functions["move_outside_solid"] = new FunctionInfo(this, 2, true);
            Functions["move_outside_all"] = new FunctionInfo(this, 2, true);
            Functions["move_bounce"] = new FunctionInfo(this, 1, true);
            Functions["move_bounce_solid"] = new FunctionInfo(this, 1, true);
            Functions["move_bounce_all"] = new FunctionInfo(this, 1, true);
            Functions["move_wrap"] = new FunctionInfo(this, 3, true);
            Functions["motion_set"] = new FunctionInfo(this, 2, true);
            Functions["motion_add"] = new FunctionInfo(this, 2, true);
            Functions["distance_to_point"] = new FunctionInfo(this, 2, true);
            Functions["distance_to_object"] = new FunctionInfo(this, 1, true);
            Functions["path_start"] = new FunctionInfo(this, 4, true);
            Functions["path_end"] = new FunctionInfo(this, 0, true);
            Functions["mp_linear_step"] = new FunctionInfo(this, 4, true);
            Functions["mp_linear_path"] = new FunctionInfo(this, 5, true);
            Functions["mp_linear_step_object"] = new FunctionInfo(this, 4, true);
            Functions["mp_linear_path_object"] = new FunctionInfo(this, 5, true);
            Functions["mp_potential_settings"] = new FunctionInfo(this, 4, true);
            Functions["mp_potential_step"] = new FunctionInfo(this, 4, true);
            Functions["mp_potential_path"] = new FunctionInfo(this, 6, true);
            Functions["mp_potential_step_object"] = new FunctionInfo(this, 4, true);
            Functions["mp_potential_path_object"] = new FunctionInfo(this, 6, true);
            Functions["mp_grid_create"] = new FunctionInfo(this, 6);
            Functions["mp_grid_destroy"] = new FunctionInfo(this, 1);
            Functions["mp_grid_clear_all"] = new FunctionInfo(this, 1);
            Functions["mp_grid_clear_cell"] = new FunctionInfo(this, 3);
            Functions["mp_grid_clear_rectangle"] = new FunctionInfo(this, 5);
            Functions["mp_grid_add_cell"] = new FunctionInfo(this, 3);
            Functions["mp_grid_get_cell"] = new FunctionInfo(this, 3);
            Functions["mp_grid_add_rectangle"] = new FunctionInfo(this, 5);
            Functions["mp_grid_add_instances"] = new FunctionInfo(this, 3, true);
            Functions["mp_grid_path"] = new FunctionInfo(this, 7, true);
            Functions["mp_grid_draw"] = new FunctionInfo(this, 1);
            Functions["mp_grid_to_ds_grid"] = new FunctionInfo(this, 2);
            Functions["collision_point"] = new FunctionInfo(this, 5, true);
            Functions["collision_point_list"] = new FunctionInfo(this, 7, true);
            Functions["collision_rectangle"] = new FunctionInfo(this, 7, true);
            Functions["collision_rectangle_list"] = new FunctionInfo(this, 9, true);
            Functions["collision_circle"] = new FunctionInfo(this, 6, true);
            Functions["collision_circle_list"] = new FunctionInfo(this, 8, true);
            Functions["collision_ellipse"] = new FunctionInfo(this, 7, true);
            Functions["collision_ellipse_list"] = new FunctionInfo(this, 9, true);
            Functions["collision_line"] = new FunctionInfo(this, 7, true);
            Functions["collision_line_list"] = new FunctionInfo(this, 9, true);
            Functions["collision_shape"] = new FunctionInfo(this, 9, true);
            Functions["point_in_rectangle"] = new FunctionInfo(this, 6, false);
            Functions["point_in_triangle"] = new FunctionInfo(this, 8, false);
            Functions["point_in_circle"] = new FunctionInfo(this, 5, false);
            Functions["rectangle_in_rectangle"] = new FunctionInfo(this, 8, false);
            Functions["rectangle_in_triangle"] = new FunctionInfo(this, 10, false);
            Functions["rectangle_in_circle"] = new FunctionInfo(this, 7, false);
            Functions["instance_find"] = new FunctionInfo(this, 2);
            Functions["instance_exists"] = new FunctionInfo(this, 1);
            Functions["instance_number"] = new FunctionInfo(this, 1);
            Functions["instance_position"] = new FunctionInfo(this, 3);
            Functions["instance_position_list"] = new FunctionInfo(this, 5);
            Functions["instance_nearest"] = new FunctionInfo(this, 3, true);
            Functions["instance_furthest"] = new FunctionInfo(this, 3, true);
            Functions["instance_place"] = new FunctionInfo(this, 3, true);
            Functions["instance_place_list"] = new FunctionInfo(this, 5, true);
            if (data?.GeneralInfo?.Major < 2)
            {
                Functions["instance_create"] = new FunctionInfo(this, 3);
            }
            Functions["instance_create_depth"] = new FunctionInfo(this, 4);
            Functions["instance_create_layer"] = new FunctionInfo(this, 4);
            Functions["instance_copy"] = new FunctionInfo(this, 1, true);
            Functions["instance_change"] = new FunctionInfo(this, 2, true);
            Functions["instance_destroy"] = new FunctionInfo(this, -1, true);
            Functions["instance_sprite"] = new FunctionInfo(this, 1, true);
            Functions["position_empty"] = new FunctionInfo(this, 2, true);
            Functions["position_meeting"] = new FunctionInfo(this, 3, true);
            Functions["position_destroy"] = new FunctionInfo(this, 2, true);
            Functions["position_change"] = new FunctionInfo(this, 4, true);
            Functions["instance_id_get"] = new FunctionInfo(this, 1, true);
            Functions["instance_deactivate_all"] = new FunctionInfo(this, 1, true);
            Functions["instance_deactivate_object"] = new FunctionInfo(this, 1, true);
            Functions["instance_deactivate_region"] = new FunctionInfo(this, 6, true);
            Functions["instance_deactivate_region_special"] = new FunctionInfo(this, 8, true);
            Functions["instance_deactivate_layer"] = new FunctionInfo(this, 1, true);
            Functions["instance_activate_all"] = new FunctionInfo(this, 0, true);
            Functions["instance_activate_object"] = new FunctionInfo(this, 1, true);
            Functions["instance_activate_region"] = new FunctionInfo(this, 5, true);
            Functions["instance_activate_layer"] = new FunctionInfo(this, 1, true);
            Functions["room_goto"] = new FunctionInfo(this, 1);
            Functions["room_goto_previous"] = new FunctionInfo(this, 0);
            Functions["room_goto_next"] = new FunctionInfo(this, 0);
            Functions["room_previous"] = new FunctionInfo(this, 1);
            Functions["room_next"] = new FunctionInfo(this, 1);
            Functions["room_restart"] = new FunctionInfo(this, 0);
            Functions["game_end"] = new FunctionInfo(this, 0);
            Functions["game_restart"] = new FunctionInfo(this, 0);
            Functions["game_load"] = new FunctionInfo(this, 1);
            Functions["game_save"] = new FunctionInfo(this, 1);
            Functions["game_save_buffer"] = new FunctionInfo(this, 1);
            Functions["game_load_buffer"] = new FunctionInfo(this, 1);
            Functions["display_get_width"] = new FunctionInfo(this, 0);
            Functions["display_get_height"] = new FunctionInfo(this, 0);
            Functions["display_get_orientation"] = new FunctionInfo(this, 0);
            Functions["display_get_gui_width"] = new FunctionInfo(this, 0);
            Functions["display_get_gui_height"] = new FunctionInfo(this, 0);
            Functions["display_reset"] = new FunctionInfo(this, 2, true);
            Functions["display_mouse_get_x"] = new FunctionInfo(this, 0);
            Functions["display_mouse_get_y"] = new FunctionInfo(this, 0);
            Functions["display_mouse_set"] = new FunctionInfo(this, 2);
            Functions["draw_enable_drawevent"] = new FunctionInfo(this, 1);
            Functions["device_mouse_x_to_gui"] = new FunctionInfo(this, 1);
            Functions["device_mouse_y_to_gui"] = new FunctionInfo(this, 1);
            Functions["display_get_windows_vertex_buffer_method"] = new FunctionInfo(this, 0);
            Functions["display_get_windows_alternate_sync"] = new FunctionInfo(this, 0);
            Functions["display_set_windows_vertex_buffer_method"] = new FunctionInfo(this, 1);
            Functions["display_set_windows_alternate_sync"] = new FunctionInfo(this, 1);
            Functions["display_set_ui_visibility"] = new FunctionInfo(this, 1);
            Functions["display_set_timing_method"] = new FunctionInfo(this, 1);
            Functions["display_get_timing_method"] = new FunctionInfo(this, 0);
            Functions["display_set_sleep_margin"] = new FunctionInfo(this, 1);
            Functions["display_get_sleep_margin"] = new FunctionInfo(this, 0);
            Functions["window_set_fullscreen"] = new FunctionInfo(this, 1);
            Functions["window_get_fullscreen"] = new FunctionInfo(this, 0);
            Functions["window_set_caption"] = new FunctionInfo(this, 1);
            Functions["window_get_caption"] = new FunctionInfo(this, 0);
            Functions["window_set_cursor"] = new FunctionInfo(this, 1);
            Functions["window_get_cursor"] = new FunctionInfo(this, 0);
            Functions["window_set_color"] = new FunctionInfo(this, 1);
            Functions["window_get_color"] = new FunctionInfo(this, 0);
            Functions["window_set_colour"] = new FunctionInfo(this, 1);
            Functions["window_get_colour"] = new FunctionInfo(this, 0);
            Functions["window_set_min_width"] = new FunctionInfo(this, 1);
            Functions["window_set_max_width"] = new FunctionInfo(this, 1);
            Functions["window_set_min_height"] = new FunctionInfo(this, 1);
            Functions["window_set_max_height"] = new FunctionInfo(this, 1);
            Functions["window_set_position"] = new FunctionInfo(this, 2);
            Functions["window_set_size"] = new FunctionInfo(this, 2);
            Functions["window_set_rectangle"] = new FunctionInfo(this, 4);
            Functions["window_center"] = new FunctionInfo(this, 0);
            Functions["window_get_x"] = new FunctionInfo(this, 0);
            Functions["window_get_y"] = new FunctionInfo(this, 0);
            Functions["window_get_width"] = new FunctionInfo(this, 0);
            Functions["window_get_height"] = new FunctionInfo(this, 0);
            Functions["window_mouse_get_x"] = new FunctionInfo(this, 0);
            Functions["window_mouse_get_y"] = new FunctionInfo(this, 0);
            Functions["window_mouse_set"] = new FunctionInfo(this, 2);
            Functions["window_view_mouse_get_x"] = new FunctionInfo(this, 1);
            Functions["window_view_mouse_get_y"] = new FunctionInfo(this, 1);
            Functions["window_views_mouse_get_x"] = new FunctionInfo(this, 0);
            Functions["window_views_mouse_get_y"] = new FunctionInfo(this, 0);
            Functions["window_get_visible_rects"] = new FunctionInfo(this, 4);
            Functions["screen_save"] = new FunctionInfo(this, 1);
            Functions["screen_save_part"] = new FunctionInfo(this, 5);
            Functions["draw_getpixel"] = new FunctionInfo(this, 2);
            Functions["draw_getpixel_ext"] = new FunctionInfo(this, 2);
            Functions["draw_set_color"] = new FunctionInfo(this, 1);
            Functions["draw_set_colour"] = new FunctionInfo(this, 1);
            Functions["draw_set_alpha"] = new FunctionInfo(this, 1);
            Functions["draw_get_color"] = new FunctionInfo(this, 0);
            Functions["draw_get_colour"] = new FunctionInfo(this, 0);
            Functions["draw_get_alpha"] = new FunctionInfo(this, 0);
            Functions["merge_color"] = new FunctionInfo(this, 3);
            Functions["make_color"] = new FunctionInfo(this, 3);
            Functions["make_color_rgb"] = new FunctionInfo(this, 3);
            Functions["make_color_hsv"] = new FunctionInfo(this, 3);
            Functions["color_get_red"] = new FunctionInfo(this, 1);
            Functions["color_get_green"] = new FunctionInfo(this, 1);
            Functions["color_get_blue"] = new FunctionInfo(this, 1);
            Functions["color_get_hue"] = new FunctionInfo(this, 1);
            Functions["color_get_saturation"] = new FunctionInfo(this, 1);
            Functions["color_get_value"] = new FunctionInfo(this, 1);
            Functions["merge_colour"] = new FunctionInfo(this, 3);
            Functions["make_colour"] = new FunctionInfo(this, 3);
            Functions["make_colour_rgb"] = new FunctionInfo(this, 3);
            Functions["make_colour_hsv"] = new FunctionInfo(this, 3);
            Functions["colour_get_red"] = new FunctionInfo(this, 1);
            Functions["colour_get_green"] = new FunctionInfo(this, 1);
            Functions["colour_get_blue"] = new FunctionInfo(this, 1);
            Functions["colour_get_hue"] = new FunctionInfo(this, 1);
            Functions["colour_get_saturation"] = new FunctionInfo(this, 1);
            Functions["colour_get_value"] = new FunctionInfo(this, 1);
            if (data?.GeneralInfo?.Major < 2)
            {
                Functions["draw_set_blend_mode"] = new FunctionInfo(this, 1);
                Functions["draw_set_blend_mode_ext"] = new FunctionInfo(this, 2);
                Functions["draw_set_color_write_enable"] = new FunctionInfo(this, 4);
                Functions["draw_set_colour_write_enable"] = new FunctionInfo(this, 4);
                Functions["draw_set_alpha_test"] = new FunctionInfo(this, 1);
                Functions["draw_set_alpha_test_ref_value"] = new FunctionInfo(this, 1);
                Functions["draw_get_alpha_test"] = new FunctionInfo(this, 0);
                Functions["draw_get_alpha_test_ref_value"] = new FunctionInfo(this, 0);
            }
            Functions["draw_clear"] = new FunctionInfo(this, 1);
            Functions["draw_clear_alpha"] = new FunctionInfo(this, 2);
            Functions["draw_point"] = new FunctionInfo(this, 2);
            Functions["draw_line"] = new FunctionInfo(this, 4);
            Functions["draw_line_width"] = new FunctionInfo(this, 5);
            Functions["draw_rectangle"] = new FunctionInfo(this, 5);
            Functions["draw_roundrect"] = new FunctionInfo(this, 5);
            Functions["draw_roundrect_ext"] = new FunctionInfo(this, 7);
            Functions["draw_triangle"] = new FunctionInfo(this, 7);
            Functions["draw_circle"] = new FunctionInfo(this, 4);
            Functions["draw_ellipse"] = new FunctionInfo(this, 5);
            Functions["draw_arrow"] = new FunctionInfo(this, 5);
            Functions["draw_button"] = new FunctionInfo(this, 5);
            Functions["draw_healthbar"] = new FunctionInfo(this, 11);
            Functions["draw_path"] = new FunctionInfo(this, 4);
            Functions["draw_point_color"] = new FunctionInfo(this, 3);
            Functions["draw_line_color"] = new FunctionInfo(this, 6);
            Functions["draw_line_width_color"] = new FunctionInfo(this, 7);
            Functions["draw_rectangle_color"] = new FunctionInfo(this, 9);
            Functions["draw_roundrect_color"] = new FunctionInfo(this, 7);
            Functions["draw_roundrect_color_ext"] = new FunctionInfo(this, 9);
            Functions["draw_triangle_color"] = new FunctionInfo(this, 10);
            Functions["draw_circle_color"] = new FunctionInfo(this, 6);
            Functions["draw_ellipse_color"] = new FunctionInfo(this, 7);
            Functions["draw_point_colour"] = new FunctionInfo(this, 3);
            Functions["draw_line_colour"] = new FunctionInfo(this, 6);
            Functions["draw_line_width_colour"] = new FunctionInfo(this, 7);
            Functions["draw_rectangle_colour"] = new FunctionInfo(this, 9);
            Functions["draw_roundrect_colour"] = new FunctionInfo(this, 7);
            Functions["draw_roundrect_colour_ext"] = new FunctionInfo(this, 9);
            Functions["draw_triangle_colour"] = new FunctionInfo(this, 10);
            Functions["draw_circle_colour"] = new FunctionInfo(this, 6);
            Functions["draw_ellipse_colour"] = new FunctionInfo(this, 7);
            Functions["draw_set_circle_precision"] = new FunctionInfo(this, 1);
            Functions["draw_primitive_begin"] = new FunctionInfo(this, 1);
            Functions["draw_primitive_begin_texture"] = new FunctionInfo(this, 2);
            Functions["draw_primitive_end"] = new FunctionInfo(this, 0);
            Functions["draw_vertex"] = new FunctionInfo(this, 2);
            Functions["draw_vertex_color"] = new FunctionInfo(this, 4);
            Functions["draw_vertex_colour"] = new FunctionInfo(this, 4);
            Functions["draw_vertex_texture"] = new FunctionInfo(this, 4);
            Functions["draw_vertex_texture_color"] = new FunctionInfo(this, 6);
            Functions["draw_vertex_texture_colour"] = new FunctionInfo(this, 6);
            Functions["sprite_get_uvs"] = new FunctionInfo(this, 2);
            if (data?.GeneralInfo?.Major < 2)
            {
                Functions["background_get_uvs"] = new FunctionInfo(this, 1);
                Functions["background_get_texture"] = new FunctionInfo(this, 1);
                Functions["texture_set_interpolation"] = new FunctionInfo(this, 1);
                Functions["texture_set_interpolation_ext"] = new FunctionInfo(this, 2);
                Functions["texture_set_blending"] = new FunctionInfo(this, 1);
                Functions["texture_set_repeat"] = new FunctionInfo(this, 1);
                Functions["texture_set_repeat_ext"] = new FunctionInfo(this, 2);
            }
            Functions["font_get_uvs"] = new FunctionInfo(this, 1);
            Functions["sprite_get_texture"] = new FunctionInfo(this, 2);
            Functions["font_get_texture"] = new FunctionInfo(this, 1);
            Functions["texture_exists"] = new FunctionInfo(this, 1);
            Functions["texture_get_width"] = new FunctionInfo(this, 1);
            Functions["texture_get_height"] = new FunctionInfo(this, 1);
            Functions["texture_global_scale"] = new FunctionInfo(this, 1);
            Functions["texture_get_uvs"] = new FunctionInfo(this, 1);
            if (data?.GeneralInfo?.Major >= 2)
            {
                Functions["texture_prefetch"] = new FunctionInfo(this, 1);
                Functions["texture_flush"] = new FunctionInfo(this, 1);
                Functions["texture_debug_messages"] = new FunctionInfo(this, 1);
                Functions["texture_is_ready"] = new FunctionInfo(this, 1);
                Functions["texturegroup_get_textures"] = new FunctionInfo(this, 1);
                Functions["texturegroup_get_sprites"] = new FunctionInfo(this, 1);
                Functions["texturegroup_get_fonts"] = new FunctionInfo(this, 1);
                Functions["texturegroup_get_tilesets"] = new FunctionInfo(this, 1);
            }
            if (data?.GeneralInfo?.Major >= 2 || data?.GeneralInfo?.Minor >= 3) // Since 1.3?
            {
                Functions["draw_enable_swf_aa"] = new FunctionInfo(this, 1);
                Functions["draw_set_swf_aa_level"] = new FunctionInfo(this, 1);
                Functions["draw_get_swf_aa_level"] = new FunctionInfo(this, 0);
            }
            Functions["draw_set_font"] = new FunctionInfo(this, 1);
            Functions["draw_set_halign"] = new FunctionInfo(this, 1);
            Functions["draw_set_valign"] = new FunctionInfo(this, 1);
            Functions["string_width"] = new FunctionInfo(this, 1);
            Functions["string_height"] = new FunctionInfo(this, 1);
            Functions["string_width_ext"] = new FunctionInfo(this, 3);
            Functions["string_height_ext"] = new FunctionInfo(this, 3);
            Functions["draw_text"] = new FunctionInfo(this, 3);
            Functions["draw_text_ext"] = new FunctionInfo(this, 5);
            Functions["draw_text_transformed"] = new FunctionInfo(this, 6);
            Functions["draw_text_ext_transformed"] = new FunctionInfo(this, 8);
            Functions["draw_text_color"] = new FunctionInfo(this, 8);
            Functions["draw_text_transformed_color"] = new FunctionInfo(this, 11);
            Functions["draw_text_ext_color"] = new FunctionInfo(this, 10);
            Functions["draw_text_ext_transformed_color"] = new FunctionInfo(this, 13);
            Functions["draw_text_colour"] = new FunctionInfo(this, 8);
            Functions["draw_text_transformed_colour"] = new FunctionInfo(this, 11);
            Functions["draw_text_ext_colour"] = new FunctionInfo(this, 10);
            Functions["draw_text_ext_transformed_colour"] = new FunctionInfo(this, 13);
            Functions["shader_enable_corner_id"] = new FunctionInfo(this, 1);
            Functions["draw_self"] = new FunctionInfo(this, 0, true);
            Functions["draw_sprite"] = new FunctionInfo(this, 4, true);
            Functions["draw_sprite_pos"] = new FunctionInfo(this, 11, true);
            Functions["draw_shape"] = new FunctionInfo(this, 12, true);
            Functions["draw_shape_string"] = new FunctionInfo(this, 11, true);
            Functions["draw_sprite_ext"] = new FunctionInfo(this, 9, true);
            Functions["draw_sprite_stretched"] = new FunctionInfo(this, 6, true);
            Functions["draw_sprite_stretched_ext"] = new FunctionInfo(this, 8, true);
            Functions["draw_sprite_part"] = new FunctionInfo(this, 8, true);
            Functions["draw_sprite_part_ext"] = new FunctionInfo(this, 12, true);
            Functions["draw_sprite_general"] = new FunctionInfo(this, 16, true);
            Functions["draw_sprite_tiled"] = new FunctionInfo(this, 4, true);
            Functions["draw_sprite_tiled_ext"] = new FunctionInfo(this, 8, true);
            if (data?.GeneralInfo?.Major < 2)
            {
                Functions["draw_background"] = new FunctionInfo(this, 3);
                Functions["draw_background_ext"] = new FunctionInfo(this, 8);
                Functions["draw_background_stretched"] = new FunctionInfo(this, 5);
                Functions["draw_background_stretched_ext"] = new FunctionInfo(this, 7);
                Functions["draw_background_part"] = new FunctionInfo(this, 7);
                Functions["draw_background_part_ext"] = new FunctionInfo(this, 11);
                Functions["draw_background_general"] = new FunctionInfo(this, 15);
                Functions["draw_background_tiled"] = new FunctionInfo(this, 3);
                Functions["draw_background_tiled_ext"] = new FunctionInfo(this, 7);
            }
            if (data?.GeneralInfo?.Major < 2)
            {
                Functions["tile_get_x"] = new FunctionInfo(this, 1);
                Functions["tile_get_y"] = new FunctionInfo(this, 1);
                Functions["tile_get_left"] = new FunctionInfo(this, 1);
                Functions["tile_get_top"] = new FunctionInfo(this, 1);
                Functions["tile_get_width"] = new FunctionInfo(this, 1);
                Functions["tile_get_height"] = new FunctionInfo(this, 1);
                Functions["tile_get_depth"] = new FunctionInfo(this, 1);
                Functions["tile_get_visible"] = new FunctionInfo(this, 1);
                Functions["tile_get_xscale"] = new FunctionInfo(this, 1);
                Functions["tile_get_yscale"] = new FunctionInfo(this, 1);
                Functions["tile_get_blend"] = new FunctionInfo(this, 1);
                Functions["tile_get_alpha"] = new FunctionInfo(this, 1);
                Functions["tile_get_background"] = new FunctionInfo(this, 1);
                Functions["tile_set_visible"] = new FunctionInfo(this, 2);
                Functions["tile_set_background"] = new FunctionInfo(this, 2);
                Functions["tile_set_region"] = new FunctionInfo(this, 5);
                Functions["tile_set_position"] = new FunctionInfo(this, 3);
                Functions["tile_set_depth"] = new FunctionInfo(this, 2);
                Functions["tile_set_scale"] = new FunctionInfo(this, 3);
                Functions["tile_set_blend"] = new FunctionInfo(this, 2);
                Functions["tile_set_alpha"] = new FunctionInfo(this, 2);
                Functions["tile_add"] = new FunctionInfo(this, 8);
                Functions["tile_get_count"] = new FunctionInfo(this, 0);
                Functions["tile_get_id"] = new FunctionInfo(this, 1);
                Functions["tile_get_ids"] = new FunctionInfo(this, 0);
                Functions["tile_get_ids_at_depth"] = new FunctionInfo(this, 1);
                Functions["tile_find"] = new FunctionInfo(this, 3);
                Functions["tile_exists"] = new FunctionInfo(this, 1);
                Functions["tile_delete"] = new FunctionInfo(this, 1);
                Functions["tile_delete_at"] = new FunctionInfo(this, 3);
                Functions["tile_layer_hide"] = new FunctionInfo(this, 1);
                Functions["tile_layer_show"] = new FunctionInfo(this, 1);
                Functions["tile_layer_delete"] = new FunctionInfo(this, 1);
                Functions["tile_layer_shift"] = new FunctionInfo(this, 3);
                Functions["tile_layer_find"] = new FunctionInfo(this, 3);
                Functions["tile_layer_delete_at"] = new FunctionInfo(this, 3);
                Functions["tile_layer_depth"] = new FunctionInfo(this, 2);
            }
            Functions["surface_create"] = new FunctionInfo(this, 2);
            Functions["surface_create_ext"] = new FunctionInfo(this, 3);
            Functions["surface_create_special"] = new FunctionInfo(this, 3);
            Functions["surface_resize"] = new FunctionInfo(this, 3);
            Functions["surface_free"] = new FunctionInfo(this, 1);
            Functions["surface_exists"] = new FunctionInfo(this, 1);
            Functions["surface_get_width"] = new FunctionInfo(this, 1);
            Functions["surface_get_height"] = new FunctionInfo(this, 1);
            Functions["surface_get_texture"] = new FunctionInfo(this, 1);
            Functions["surface_set_target"] = new FunctionInfo(this, 1);
            Functions["surface_set_target_ext"] = new FunctionInfo(this, 2);
            Functions["surface_reset_target"] = new FunctionInfo(this, 0);
            Functions["surface_depth_disable"] = new FunctionInfo(this, 1);
            Functions["surface_get_depth_disable"] = new FunctionInfo(this, 0);
            Functions["draw_surface"] = new FunctionInfo(this, 3);
            Functions["draw_surface_ext"] = new FunctionInfo(this, 8);
            Functions["draw_surface_stretched"] = new FunctionInfo(this, 5);
            Functions["draw_surface_stretched_ext"] = new FunctionInfo(this, 7);
            Functions["draw_surface_part"] = new FunctionInfo(this, 7);
            Functions["draw_surface_part_ext"] = new FunctionInfo(this, 11);
            Functions["draw_surface_general"] = new FunctionInfo(this, 15);
            Functions["draw_surface_tiled"] = new FunctionInfo(this, 3);
            Functions["draw_surface_tiled_ext"] = new FunctionInfo(this, 7);
            Functions["surface_save"] = new FunctionInfo(this, 2);
            Functions["surface_save_part"] = new FunctionInfo(this, 6);
            Functions["surface_getpixel"] = new FunctionInfo(this, 3);
            Functions["surface_getpixel_ext"] = new FunctionInfo(this, 3);
            Functions["surface_copy"] = new FunctionInfo(this, 4);
            Functions["surface_copy_part"] = new FunctionInfo(this, 8);
            Functions["application_surface_draw_enable"] = new FunctionInfo(this, 1);
            Functions["application_get_position"] = new FunctionInfo(this, 0);
            Functions["application_surface_enable"] = new FunctionInfo(this, 1);
            Functions["application_surface_is_enabled"] = new FunctionInfo(this, 0);
            Functions["show_message"] = new FunctionInfo(this, 1);
            Functions["show_question"] = new FunctionInfo(this, 1);
            Functions["show_message_async"] = new FunctionInfo(this, 1);
            Functions["show_question_async"] = new FunctionInfo(this, 1);
            Functions["show_error"] = new FunctionInfo(this, 2);
            Functions["highscore_clear"] = new FunctionInfo(this, 0);
            Functions["highscore_add"] = new FunctionInfo(this, 2);
            Functions["highscore_value"] = new FunctionInfo(this, 1);
            Functions["highscore_name"] = new FunctionInfo(this, 1);
            Functions["draw_highscore"] = new FunctionInfo(this, 4);
            Functions["clickable_add"] = new FunctionInfo(this, 6);
            Functions["clickable_add_ext"] = new FunctionInfo(this, 8);
            Functions["clickable_change"] = new FunctionInfo(this, 4);
            Functions["clickable_change_ext"] = new FunctionInfo(this, 6);
            Functions["clickable_delete"] = new FunctionInfo(this, 1);
            Functions["clickable_exists"] = new FunctionInfo(this, 1);
            Functions["clickable_set_style"] = new FunctionInfo(this, 2);
            Functions["get_integer"] = new FunctionInfo(this, 2);
            Functions["get_string"] = new FunctionInfo(this, 2);
            Functions["get_integer_async"] = new FunctionInfo(this, 2);
            Functions["get_string_async"] = new FunctionInfo(this, 2);
            Functions["get_login_async"] = new FunctionInfo(this, 2);
            Functions["get_color"] = new FunctionInfo(this, 1);
            Functions["get_open_filename"] = new FunctionInfo(this, 2);
            Functions["get_save_filename"] = new FunctionInfo(this, 2);
            Functions["get_open_filename_ext"] = new FunctionInfo(this, 4);
            Functions["get_save_filename_ext"] = new FunctionInfo(this, 4);
            Functions["keyboard_get_numlock"] = new FunctionInfo(this, 0);
            Functions["keyboard_set_numlock"] = new FunctionInfo(this, 1);
            Functions["keyboard_key_press"] = new FunctionInfo(this, 1);
            Functions["keyboard_key_release"] = new FunctionInfo(this, 1);
            Functions["keyboard_set_map"] = new FunctionInfo(this, 2);
            Functions["keyboard_get_map"] = new FunctionInfo(this, 1);
            Functions["keyboard_unset_map"] = new FunctionInfo(this, 0);
            Functions["keyboard_check"] = new FunctionInfo(this, 1);
            Functions["keyboard_check_pressed"] = new FunctionInfo(this, 1);
            Functions["keyboard_check_released"] = new FunctionInfo(this, 1);
            Functions["keyboard_check_direct"] = new FunctionInfo(this, 1);
            Functions["mouse_check_button"] = new FunctionInfo(this, 1);
            Functions["mouse_check_button_pressed"] = new FunctionInfo(this, 1);
            Functions["mouse_check_button_released"] = new FunctionInfo(this, 1);
            Functions["mouse_wheel_up"] = new FunctionInfo(this, 0);
            Functions["mouse_wheel_down"] = new FunctionInfo(this, 0);
            if (data?.GeneralInfo?.Major >= 2)
            {
                Functions["keyboard_virtual_show"] = new FunctionInfo(this, 4);
                Functions["keyboard_virtual_hide"] = new FunctionInfo(this, 0);
                Functions["keyboard_virtual_status"] = new FunctionInfo(this, 0);
                Functions["keyboard_virtual_height"] = new FunctionInfo(this, 0);
            }
            if (data?.GeneralInfo?.Major < 2)
            {
                Functions["joystick_exists"] = new FunctionInfo(this, 1, FunctionClassification.Joystick);
                Functions["joystick_direction"] = new FunctionInfo(this, 1, FunctionClassification.Joystick);
                Functions["joystick_name"] = new FunctionInfo(this, 1, FunctionClassification.Joystick);
                Functions["joystick_axes"] = new FunctionInfo(this, 1, FunctionClassification.Joystick);
                Functions["joystick_buttons"] = new FunctionInfo(this, 1, FunctionClassification.Joystick);
                Functions["joystick_has_pov"] = new FunctionInfo(this, 1, FunctionClassification.Joystick);
                Functions["joystick_check_button"] = new FunctionInfo(this, 2, FunctionClassification.Joystick);
                Functions["joystick_xpos"] = new FunctionInfo(this, 1, FunctionClassification.Joystick);
                Functions["joystick_ypos"] = new FunctionInfo(this, 1, FunctionClassification.Joystick);
                Functions["joystick_zpos"] = new FunctionInfo(this, 1, FunctionClassification.Joystick);
                Functions["joystick_rpos"] = new FunctionInfo(this, 1, FunctionClassification.Joystick);
                Functions["joystick_upos"] = new FunctionInfo(this, 1, FunctionClassification.Joystick);
                Functions["joystick_vpos"] = new FunctionInfo(this, 1, FunctionClassification.Joystick);
                Functions["joystick_pov"] = new FunctionInfo(this, 1, FunctionClassification.Joystick);
            }
            Functions["keyboard_clear"] = new FunctionInfo(this, 1);
            Functions["mouse_clear"] = new FunctionInfo(this, 1);
            Functions["io_clear"] = new FunctionInfo(this, 0);
            Functions["device_mouse_dbclick_enable"] = new FunctionInfo(this, 1);
            Functions["gpio_set"] = new FunctionInfo(this, 2);
            Functions["gpio_clear"] = new FunctionInfo(this, 1);
            Functions["gpio_get"] = new FunctionInfo(this, 1);
            Functions["gpio_set_mode"] = new FunctionInfo(this, 2);
            if (data?.GeneralInfo?.Major >= 2)
            {
                Functions["gesture_drag_time"] = new FunctionInfo(this, 1);
                Functions["gesture_drag_distance"] = new FunctionInfo(this, 1);
                Functions["gesture_flick_speed"] = new FunctionInfo(this, 1);
                Functions["gesture_double_tap_time"] = new FunctionInfo(this, 1);
                Functions["gesture_double_tap_distance"] = new FunctionInfo(this, 1);
                Functions["gesture_pinch_distance"] = new FunctionInfo(this, 1);
                Functions["gesture_pinch_angle_towards"] = new FunctionInfo(this, 1);
                Functions["gesture_pinch_angle_away"] = new FunctionInfo(this, 1);
                Functions["gesture_rotate_time"] = new FunctionInfo(this, 1);
                Functions["gesture_rotate_angle"] = new FunctionInfo(this, 1);
                Functions["gesture_tap_count"] = new FunctionInfo(this, 1);
                Functions["gesture_get_drag_time"] = new FunctionInfo(this, 0);
                Functions["gesture_get_drag_distance"] = new FunctionInfo(this, 0);
                Functions["gesture_get_flick_speed"] = new FunctionInfo(this, 0);
                Functions["gesture_get_double_tap_time"] = new FunctionInfo(this, 0);
                Functions["gesture_get_double_tap_distance"] = new FunctionInfo(this, 0);
                Functions["gesture_get_pinch_distance"] = new FunctionInfo(this, 0);
                Functions["gesture_get_pinch_angle_towards"] = new FunctionInfo(this, 0);
                Functions["gesture_get_pinch_angle_away"] = new FunctionInfo(this, 0);
                Functions["gesture_get_rotate_time"] = new FunctionInfo(this, 0);
                Functions["gesture_get_rotate_angle"] = new FunctionInfo(this, 0);
                Functions["gesture_get_tap_count"] = new FunctionInfo(this, 0);
            }
            Functions["is_bool"] = new FunctionInfo(this, 1);
            Functions["is_real"] = new FunctionInfo(this, 1);
            Functions["is_string"] = new FunctionInfo(this, 1);
            Functions["is_array"] = new FunctionInfo(this, 1);
            Functions["is_undefined"] = new FunctionInfo(this, 1);
            Functions["is_int32"] = new FunctionInfo(this, 1);
            Functions["is_int64"] = new FunctionInfo(this, 1);
            Functions["is_ptr"] = new FunctionInfo(this, 1);
            Functions["is_vec3"] = new FunctionInfo(this, 1);
            Functions["is_vec4"] = new FunctionInfo(this, 1);
            Functions["is_matrix"] = new FunctionInfo(this, 1);
            Functions["array_length_1d"] = new FunctionInfo(this, 1);
            Functions["array_length_2d"] = new FunctionInfo(this, 2);
            Functions["array_height_2d"] = new FunctionInfo(this, 1);
            Functions["array_set"] = new FunctionInfo(this, 3);
            Functions["array_set_pre"] = new FunctionInfo(this, 3);
            Functions["array_set_post"] = new FunctionInfo(this, 3);
            Functions["array_get"] = new FunctionInfo(this, 2);
            Functions["array_set_2D"] = new FunctionInfo(this, 4);
            Functions["array_set_2D_pre"] = new FunctionInfo(this, 4);
            Functions["array_set_2D_post"] = new FunctionInfo(this, 4);
            Functions["array_get_2D"] = new FunctionInfo(this, 3);
            Functions["array_equals"] = new FunctionInfo(this, 2);
            Functions["array_create"] = new FunctionInfo(this, -1);
            Functions["array_copy"] = new FunctionInfo(this, 5);
            if (data?.IsVersionAtLeast(2, 3) == true)
            {
                Functions["method"] = new FunctionInfo(this, 2);
                Functions["method_get_self"] = new FunctionInfo(this, 1);
                Functions["method_get_index"] = new FunctionInfo(this, 1);
            }
            Functions["typeof"] = new FunctionInfo(this, 1);
            Functions["variable_global_exists"] = new FunctionInfo(this, 1);
            Functions["variable_global_get"] = new FunctionInfo(this, 1);
            Functions["variable_global_set"] = new FunctionInfo(this, 2);
            Functions["variable_instance_exists"] = new FunctionInfo(this, 2);
            Functions["variable_instance_get"] = new FunctionInfo(this, 2);
            Functions["variable_instance_set"] = new FunctionInfo(this, 3);
            Functions["variable_instance_get_names"] = new FunctionInfo(this, 1);
            Functions["random"] = new FunctionInfo(this, 1);
            Functions["random_range"] = new FunctionInfo(this, 2);
            Functions["irandom"] = new FunctionInfo(this, 1);
            Functions["irandom_range"] = new FunctionInfo(this, 2);
            Functions["random_set_seed"] = new FunctionInfo(this, 1);
            Functions["random_get_seed"] = new FunctionInfo(this, 0);
            Functions["randomize"] = new FunctionInfo(this, 0);
            Functions["randomise"] = new FunctionInfo(this, 0);
            Functions["random_use_old_version"] = new FunctionInfo(this, 1);
            Functions["abs"] = new FunctionInfo(this, 1);
            Functions["round"] = new FunctionInfo(this, 1);
            Functions["floor"] = new FunctionInfo(this, 1);
            Functions["ceil"] = new FunctionInfo(this, 1);
            Functions["sign"] = new FunctionInfo(this, 1);
            Functions["frac"] = new FunctionInfo(this, 1);
            Functions["sqrt"] = new FunctionInfo(this, 1);
            Functions["sqr"] = new FunctionInfo(this, 1);
            Functions["exp"] = new FunctionInfo(this, 1);
            Functions["ln"] = new FunctionInfo(this, 1);
            Functions["log2"] = new FunctionInfo(this, 1);
            Functions["log10"] = new FunctionInfo(this, 1);
            Functions["sin"] = new FunctionInfo(this, 1);
            Functions["cos"] = new FunctionInfo(this, 1);
            Functions["tan"] = new FunctionInfo(this, 1);
            Functions["arcsin"] = new FunctionInfo(this, 1);
            Functions["arccos"] = new FunctionInfo(this, 1);
            Functions["arctan"] = new FunctionInfo(this, 1);
            Functions["arctan2"] = new FunctionInfo(this, 2);
            Functions["dsin"] = new FunctionInfo(this, 1);
            Functions["dcos"] = new FunctionInfo(this, 1);
            Functions["dtan"] = new FunctionInfo(this, 1);
            Functions["darcsin"] = new FunctionInfo(this, 1);
            Functions["darccos"] = new FunctionInfo(this, 1);
            Functions["darctan"] = new FunctionInfo(this, 1);
            Functions["darctan2"] = new FunctionInfo(this, 2);
            Functions["degtorad"] = new FunctionInfo(this, 1);
            Functions["radtodeg"] = new FunctionInfo(this, 1);
            Functions["power"] = new FunctionInfo(this, 2);
            Functions["logn"] = new FunctionInfo(this, 2);
            Functions["min"] = new FunctionInfo(this, -1);
            Functions["max"] = new FunctionInfo(this, -1);
            Functions["min3"] = new FunctionInfo(this, 3);
            Functions["max3"] = new FunctionInfo(this, 3);
            Functions["mean"] = new FunctionInfo(this, -1);
            Functions["median"] = new FunctionInfo(this, -1);
            Functions["choose"] = new FunctionInfo(this, -1);
            Functions["clamp"] = new FunctionInfo(this, 3);
            Functions["lerp"] = new FunctionInfo(this, 3);
            Functions["dot_product"] = new FunctionInfo(this, 4);
            Functions["dot_product_3d"] = new FunctionInfo(this, 6);
            Functions["dot_product_normalised"] = new FunctionInfo(this, 4);
            Functions["dot_product_3d_normalised"] = new FunctionInfo(this, 6);
            Functions["dot_product_normalized"] = new FunctionInfo(this, 4);
            Functions["dot_product_3d_normalized"] = new FunctionInfo(this, 6);
            Functions["math_set_epsilon"] = new FunctionInfo(this, 1);
            Functions["math_get_epsilon"] = new FunctionInfo(this, 0);
            Functions["angle_difference"] = new FunctionInfo(this, 2);
            Functions["real"] = new FunctionInfo(this, 1);
            Functions["bool"] = new FunctionInfo(this, 1);
            Functions["string"] = new FunctionInfo(this, 1);
            Functions["int64"] = new FunctionInfo(this, 1);
            Functions["ptr"] = new FunctionInfo(this, 1);
            Functions["string_format"] = new FunctionInfo(this, 3);
            Functions["chr"] = new FunctionInfo(this, 1);
            Functions["ansi_char"] = new FunctionInfo(this, 1);
            Functions["ord"] = new FunctionInfo(this, 1);
            Functions["string_length"] = new FunctionInfo(this, 1);
            Functions["string_byte_length"] = new FunctionInfo(this, 1);
            Functions["string_pos"] = new FunctionInfo(this, 2);
            Functions["string_copy"] = new FunctionInfo(this, 3);
            Functions["string_char_at"] = new FunctionInfo(this, 2);
            Functions["string_ord_at"] = new FunctionInfo(this, 2);
            Functions["string_byte_at"] = new FunctionInfo(this, 2);
            Functions["string_set_byte_at"] = new FunctionInfo(this, 3);
            Functions["string_delete"] = new FunctionInfo(this, 3);
            Functions["string_insert"] = new FunctionInfo(this, 3);
            Functions["string_lower"] = new FunctionInfo(this, 1);
            Functions["string_upper"] = new FunctionInfo(this, 1);
            Functions["string_repeat"] = new FunctionInfo(this, 2);
            Functions["string_letters"] = new FunctionInfo(this, 1);
            Functions["string_digits"] = new FunctionInfo(this, 1);
            Functions["string_lettersdigits"] = new FunctionInfo(this, 1);
            Functions["string_replace"] = new FunctionInfo(this, 3);
            Functions["string_replace_all"] = new FunctionInfo(this, 3);
            Functions["string_count"] = new FunctionInfo(this, 2);
            Functions["string_hash_to_newline"] = new FunctionInfo(this, 1);
            Functions["point_distance"] = new FunctionInfo(this, 4);
            Functions["point_distance_3d"] = new FunctionInfo(this, 6);
            Functions["point_direction"] = new FunctionInfo(this, 4);
            Functions["lengthdir_x"] = new FunctionInfo(this, 2);
            Functions["lengthdir_y"] = new FunctionInfo(this, 2);
            Functions["event_inherited"] = new FunctionInfo(this, 0, true, true);
            Functions["event_perform"] = new FunctionInfo(this, 2, true);
            Functions["event_user"] = new FunctionInfo(this, 1, true);
            Functions["event_perform_object"] = new FunctionInfo(this, 3, true);
            Functions["external_define"] = new FunctionInfo(this, -1);
            Functions["external_call"] = new FunctionInfo(this, -1);
            Functions["external_free"] = new FunctionInfo(this, 1);
            Functions["external_define0"] = new FunctionInfo(this, 3);
            Functions["external_call0"] = new FunctionInfo(this, 1);
            Functions["external_define1"] = new FunctionInfo(this, 4);
            Functions["external_call1"] = new FunctionInfo(this, 2);
            Functions["external_define2"] = new FunctionInfo(this, 5);
            Functions["external_call2"] = new FunctionInfo(this, 3);
            Functions["external_define3"] = new FunctionInfo(this, 6);
            Functions["external_call3"] = new FunctionInfo(this, 4);
            Functions["external_define4"] = new FunctionInfo(this, 7);
            Functions["external_call4"] = new FunctionInfo(this, 5);
            Functions["external_define5"] = new FunctionInfo(this, 3);
            Functions["external_call5"] = new FunctionInfo(this, 6);
            Functions["external_define6"] = new FunctionInfo(this, 3);
            Functions["external_call6"] = new FunctionInfo(this, 7);
            Functions["external_define7"] = new FunctionInfo(this, 3);
            Functions["external_call7"] = new FunctionInfo(this, 8);
            Functions["external_define8"] = new FunctionInfo(this, 3);
            Functions["external_call8"] = new FunctionInfo(this, 9);
            Functions["window_handle"] = new FunctionInfo(this, 0);
            Functions["window_device"] = new FunctionInfo(this, 0);
            Functions["logical_xor"] = new FunctionInfo(this, 2);
            Functions["debug_get_callstack"] = new FunctionInfo(this, -1);
            Functions["show_debug_message"] = new FunctionInfo(this, 1);
            Functions["show_debug_overlay"] = new FunctionInfo(this, 1);
            Functions["debug_event"] = new FunctionInfo(this, 1);
            Functions["alarm_get"] = new FunctionInfo(this, 1, true);
            Functions["alarm_set"] = new FunctionInfo(this, 2, true);
            Functions["clipboard_has_text"] = new FunctionInfo(this, 0);
            Functions["clipboard_set_text"] = new FunctionInfo(this, 1);
            Functions["clipboard_get_text"] = new FunctionInfo(this, 0);
            Functions["date_current_datetime"] = new FunctionInfo(this, 0);
            Functions["date_create_datetime"] = new FunctionInfo(this, 6);
            Functions["date_valid_datetime"] = new FunctionInfo(this, 6);
            Functions["date_inc_year"] = new FunctionInfo(this, 2);
            Functions["date_inc_month"] = new FunctionInfo(this, 2);
            Functions["date_inc_week"] = new FunctionInfo(this, 2);
            Functions["date_inc_day"] = new FunctionInfo(this, 2);
            Functions["date_inc_hour"] = new FunctionInfo(this, 2);
            Functions["date_inc_minute"] = new FunctionInfo(this, 2);
            Functions["date_inc_second"] = new FunctionInfo(this, 2);
            Functions["date_get_year"] = new FunctionInfo(this, 1);
            Functions["date_get_month"] = new FunctionInfo(this, 1);
            Functions["date_get_week"] = new FunctionInfo(this, 1);
            Functions["date_get_day"] = new FunctionInfo(this, 1);
            Functions["date_get_hour"] = new FunctionInfo(this, 1);
            Functions["date_get_minute"] = new FunctionInfo(this, 1);
            Functions["date_get_second"] = new FunctionInfo(this, 1);
            Functions["date_get_weekday"] = new FunctionInfo(this, 1);
            Functions["date_get_day_of_year"] = new FunctionInfo(this, 1);
            Functions["date_get_hour_of_year"] = new FunctionInfo(this, 1);
            Functions["date_get_minute_of_year"] = new FunctionInfo(this, 1);
            Functions["date_get_second_of_year"] = new FunctionInfo(this, 1);
            Functions["date_year_span"] = new FunctionInfo(this, 2);
            Functions["date_month_span"] = new FunctionInfo(this, 2);
            Functions["date_week_span"] = new FunctionInfo(this, 2);
            Functions["date_day_span"] = new FunctionInfo(this, 2);
            Functions["date_hour_span"] = new FunctionInfo(this, 2);
            Functions["date_minute_span"] = new FunctionInfo(this, 2);
            Functions["date_second_span"] = new FunctionInfo(this, 2);
            Functions["date_compare_datetime"] = new FunctionInfo(this, 2);
            Functions["date_compare_date"] = new FunctionInfo(this, 2);
            Functions["date_compare_time"] = new FunctionInfo(this, 2);
            Functions["date_date_of"] = new FunctionInfo(this, 1);
            Functions["date_time_of"] = new FunctionInfo(this, 1);
            Functions["date_datetime_string"] = new FunctionInfo(this, 1);
            Functions["date_date_string"] = new FunctionInfo(this, 1);
            Functions["date_time_string"] = new FunctionInfo(this, 1);
            Functions["date_days_in_month"] = new FunctionInfo(this, 1);
            Functions["date_days_in_year"] = new FunctionInfo(this, 1);
            Functions["date_leap_year"] = new FunctionInfo(this, 1);
            Functions["date_is_today"] = new FunctionInfo(this, 1);
            Functions["date_set_timezone"] = new FunctionInfo(this, 1);
            Functions["date_get_timezone"] = new FunctionInfo(this, 0);
            Functions["game_set_speed"] = new FunctionInfo(this, 2);
            Functions["game_get_speed"] = new FunctionInfo(this, 1);
            Functions["part_type_create"] = new FunctionInfo(this, 0);
            Functions["part_type_destroy"] = new FunctionInfo(this, 1);
            Functions["part_type_exists"] = new FunctionInfo(this, 1);
            Functions["part_type_clear"] = new FunctionInfo(this, 1);
            Functions["part_type_shape"] = new FunctionInfo(this, 2);
            Functions["part_type_sprite"] = new FunctionInfo(this, 5);
            Functions["part_type_size"] = new FunctionInfo(this, 5);
            Functions["part_type_scale"] = new FunctionInfo(this, 3);
            Functions["part_type_life"] = new FunctionInfo(this, 3);
            Functions["part_type_step"] = new FunctionInfo(this, 3);
            Functions["part_type_death"] = new FunctionInfo(this, 3);
            Functions["part_type_speed"] = new FunctionInfo(this, 5);
            Functions["part_type_direction"] = new FunctionInfo(this, 5);
            Functions["part_type_orientation"] = new FunctionInfo(this, 6);
            Functions["part_type_gravity"] = new FunctionInfo(this, 3);
            Functions["part_type_color_mix"] = new FunctionInfo(this, 3);
            Functions["part_type_color_rgb"] = new FunctionInfo(this, 7);
            Functions["part_type_color_hsv"] = new FunctionInfo(this, 7);
            Functions["part_type_color1"] = new FunctionInfo(this, 2);
            Functions["part_type_color2"] = new FunctionInfo(this, 3);
            Functions["part_type_color3"] = new FunctionInfo(this, 4);
            Functions["part_type_color"] = new FunctionInfo(this, 4);
            Functions["part_type_colour_mix"] = new FunctionInfo(this, 3);
            Functions["part_type_colour_rgb"] = new FunctionInfo(this, 7);
            Functions["part_type_colour_hsv"] = new FunctionInfo(this, 7);
            Functions["part_type_colour1"] = new FunctionInfo(this, 2);
            Functions["part_type_colour2"] = new FunctionInfo(this, 3);
            Functions["part_type_colour3"] = new FunctionInfo(this, 4);
            Functions["part_type_colour"] = new FunctionInfo(this, 4);
            Functions["part_type_alpha1"] = new FunctionInfo(this, 2);
            Functions["part_type_alpha2"] = new FunctionInfo(this, 3);
            Functions["part_type_alpha3"] = new FunctionInfo(this, 4);
            Functions["part_type_alpha"] = new FunctionInfo(this, 4);
            Functions["part_type_blend"] = new FunctionInfo(this, 2);
            Functions["part_system_create"] = new FunctionInfo(this, 0);
            Functions["part_system_destroy"] = new FunctionInfo(this, 1);
            Functions["part_system_exists"] = new FunctionInfo(this, 1);
            Functions["part_system_clear"] = new FunctionInfo(this, 1);
            Functions["part_system_draw_order"] = new FunctionInfo(this, 2);
            Functions["part_system_depth"] = new FunctionInfo(this, 2);
            Functions["part_system_position"] = new FunctionInfo(this, 3);
            Functions["part_system_automatic_update"] = new FunctionInfo(this, 2);
            Functions["part_system_automatic_draw"] = new FunctionInfo(this, 2);
            Functions["part_system_update"] = new FunctionInfo(this, 1);
            Functions["part_system_drawit"] = new FunctionInfo(this, 1);
            if (data?.GeneralInfo?.Major >= 2)
            {
                Functions["part_system_create_layer"] = new FunctionInfo(this, 2);
                Functions["part_system_get_layer"] = new FunctionInfo(this, 1);
                Functions["part_system_layer"] = new FunctionInfo(this, 2);
            }
            Functions["part_particles_create"] = new FunctionInfo(this, 5);
            Functions["part_particles_create_color"] = new FunctionInfo(this, 6);
            Functions["part_particles_create_colour"] = new FunctionInfo(this, 6);
            Functions["part_particles_clear"] = new FunctionInfo(this, 1);
            Functions["part_particles_count"] = new FunctionInfo(this, 1);
            Functions["part_emitter_create"] = new FunctionInfo(this, 1);
            Functions["part_emitter_destroy"] = new FunctionInfo(this, 2);
            Functions["part_emitter_destroy_all"] = new FunctionInfo(this, 1);
            Functions["part_emitter_exists"] = new FunctionInfo(this, 2);
            Functions["part_emitter_clear"] = new FunctionInfo(this, 2);
            Functions["part_emitter_region"] = new FunctionInfo(this, 8);
            Functions["part_emitter_burst"] = new FunctionInfo(this, 4);
            Functions["part_emitter_stream"] = new FunctionInfo(this, 4);
            Functions["effect_create_below"] = new FunctionInfo(this, 5);
            Functions["effect_create_above"] = new FunctionInfo(this, 5);
            Functions["effect_clear"] = new FunctionInfo(this, 0);
            Functions["sprite_name"] = new FunctionInfo(this, 1);
            Functions["sprite_exists"] = new FunctionInfo(this, 1);
            Functions["sprite_get_name"] = new FunctionInfo(this, 1);
            Functions["sprite_get_number"] = new FunctionInfo(this, 1);
            Functions["sprite_get_width"] = new FunctionInfo(this, 1);
            Functions["sprite_get_height"] = new FunctionInfo(this, 1);
            Functions["sprite_get_transparent"] = new FunctionInfo(this, 1);
            Functions["sprite_get_smooth"] = new FunctionInfo(this, 1);
            Functions["sprite_get_preload"] = new FunctionInfo(this, 1);
            Functions["sprite_get_xoffset"] = new FunctionInfo(this, 1);
            Functions["sprite_get_yoffset"] = new FunctionInfo(this, 1);
            Functions["sprite_get_bbox_mode"] = new FunctionInfo(this, 1);
            Functions["sprite_get_bbox_left"] = new FunctionInfo(this, 1);
            Functions["sprite_get_bbox_right"] = new FunctionInfo(this, 1);
            Functions["sprite_get_bbox_top"] = new FunctionInfo(this, 1);
            Functions["sprite_get_bbox_bottom"] = new FunctionInfo(this, 1);
            Functions["sprite_get_precise"] = new FunctionInfo(this, 1);
            Functions["sprite_collision_mask"] = new FunctionInfo(this, 9);
            Functions["sprite_get_tpe"] = new FunctionInfo(this, 2);
            Functions["sprite_set_offset"] = new FunctionInfo(this, 3);
            Functions["sprite_set_bbox_mode"] = new FunctionInfo(this, 2);
            Functions["sprite_set_bbox"] = new FunctionInfo(this, 5);
            Functions["sprite_set_precise"] = new FunctionInfo(this, 2);
            Functions["sprite_set_alpha_from_sprite"] = new FunctionInfo(this, 2);
            Functions["sprite_add"] = new FunctionInfo(this, 6);
            Functions["sprite_replace"] = new FunctionInfo(this, 7);
            Functions["sprite_create_from_surface"] = new FunctionInfo(this, 9);
            Functions["sprite_add_from_surface"] = new FunctionInfo(this, 8);
            Functions["sprite_delete"] = new FunctionInfo(this, 1);
            Functions["sprite_duplicate"] = new FunctionInfo(this, 1);
            Functions["sprite_add_alpha"] = new FunctionInfo(this, 6);
            Functions["sprite_replace_alpha"] = new FunctionInfo(this, 7);
            Functions["sprite_assign"] = new FunctionInfo(this, 2);
            Functions["sprite_merge"] = new FunctionInfo(this, 2);
            Functions["sprite_save"] = new FunctionInfo(this, 3);
            Functions["sprite_save_strip"] = new FunctionInfo(this, 2);
            Functions["sprite_set_cache_size"] = new FunctionInfo(this, 2);
            Functions["sprite_set_cache_size_ext"] = new FunctionInfo(this, 3);
            Functions["font_set_cache_size"] = new FunctionInfo(this, 2);
            Functions["sprite_prefetch"] = new FunctionInfo(this, 1);
            Functions["sprite_prefetch_multi"] = new FunctionInfo(this, 1);
            Functions["sprite_flush"] = new FunctionInfo(this, 1);
            Functions["sprite_flush_multi"] = new FunctionInfo(this, 1);
            if (data?.GeneralInfo?.Major >= 2)
            {
                Functions["sprite_set_speed"] = new FunctionInfo(this, 3);
                Functions["sprite_get_speed_type"] = new FunctionInfo(this, 1);
                Functions["sprite_get_speed"] = new FunctionInfo(this, 1);
            }
            if (data?.GeneralInfo?.Major < 2)
            {
                Functions["background_name"] = new FunctionInfo(this, 1);
                Functions["background_exists"] = new FunctionInfo(this, 1);
                Functions["background_get_name"] = new FunctionInfo(this, 1);
                Functions["background_get_width"] = new FunctionInfo(this, 1);
                Functions["background_get_height"] = new FunctionInfo(this, 1);
                Functions["background_get_transparent"] = new FunctionInfo(this, 1);
                Functions["background_get_smooth"] = new FunctionInfo(this, 1);
                Functions["background_get_preload"] = new FunctionInfo(this, 1);
                Functions["background_set_alpha_from_background"] = new FunctionInfo(this, 2);
                Functions["background_create_from_surface"] = new FunctionInfo(this, 7);
                Functions["background_create_color"] = new FunctionInfo(this, 3, true);
                Functions["background_create_colour"] = new FunctionInfo(this, 3, true);
                Functions["background_create_gradient"] = new FunctionInfo(this, 5);
                Functions["background_add"] = new FunctionInfo(this, 3);
                Functions["background_replace"] = new FunctionInfo(this, 4);
                Functions["background_add_alpha"] = new FunctionInfo(this, 2);
                Functions["background_replace_alpha"] = new FunctionInfo(this, 3);
                Functions["background_delete"] = new FunctionInfo(this, 1);
                Functions["background_duplicate"] = new FunctionInfo(this, 1);
                Functions["background_assign"] = new FunctionInfo(this, 2);
                Functions["background_save"] = new FunctionInfo(this, 2);
                Functions["background_prefetch"] = new FunctionInfo(this, 1);
                Functions["background_prefetch_multi"] = new FunctionInfo(this, 1);
                Functions["background_flush"] = new FunctionInfo(this, 1);
                Functions["background_flush_multi"] = new FunctionInfo(this, 1);
            }
            if (data?.GeneralInfo?.Major < 2)
            {
                Functions["sound_name"] = new FunctionInfo(this, 1);
                Functions["sound_exists"] = new FunctionInfo(this, 1);
                Functions["sound_get_name"] = new FunctionInfo(this, 1);
                Functions["sound_get_kind"] = new FunctionInfo(this, 1);
                Functions["sound_get_preload"] = new FunctionInfo(this, 1);
                Functions["sound_discard"] = new FunctionInfo(this, 1);
                Functions["sound_restore"] = new FunctionInfo(this, 1);
                Functions["sound_delete"] = new FunctionInfo(this, 1);
            }
            Functions["audio_listener_position"] = new FunctionInfo(this, 3);
            Functions["audio_listener_velocity"] = new FunctionInfo(this, 3);
            Functions["audio_listener_orientation"] = new FunctionInfo(this, 6);
            Functions["audio_emitter_position"] = new FunctionInfo(this, 4);
            Functions["audio_emitter_create"] = new FunctionInfo(this, 0);
            Functions["audio_emitter_exists"] = new FunctionInfo(this, 1);
            Functions["audio_emitter_free"] = new FunctionInfo(this, 1);
            Functions["audio_emitter_pitch"] = new FunctionInfo(this, 2);
            Functions["audio_emitter_velocity"] = new FunctionInfo(this, 4);
            Functions["audio_emitter_falloff"] = new FunctionInfo(this, 4);
            Functions["audio_emitter_gain"] = new FunctionInfo(this, 2);
            Functions["audio_play_sound"] = new FunctionInfo(this, 3);
            Functions["audio_play_sound_on"] = new FunctionInfo(this, 4);
            Functions["audio_play_sound_at"] = new FunctionInfo(this, 9);
            Functions["audio_stop_sound"] = new FunctionInfo(this, 1);
            Functions["audio_resume_sound"] = new FunctionInfo(this, 1);
            Functions["audio_pause_sound"] = new FunctionInfo(this, 1);
            Functions["audio_channel_num"] = new FunctionInfo(this, 1);
            Functions["audio_sound_length"] = new FunctionInfo(this, 1);
            Functions["audio_get_type"] = new FunctionInfo(this, 1);
            Functions["audio_falloff_set_model"] = new FunctionInfo(this, 1);
            Functions["audio_sound_get_listener_mask"] = new FunctionInfo(this, 1);
            Functions["audio_emitter_get_listener_mask"] = new FunctionInfo(this, 1);
            Functions["audio_get_listener_mask"] = new FunctionInfo(this, 0);
            Functions["audio_sound_set_listener_mask"] = new FunctionInfo(this, 2);
            Functions["audio_emitter_set_listener_mask"] = new FunctionInfo(this, 2);
            Functions["audio_set_listener_mask"] = new FunctionInfo(this, 1);
            Functions["audio_get_listener_count"] = new FunctionInfo(this, 0);
            Functions["audio_get_listener_info"] = new FunctionInfo(this, 1);
            Functions["audio_play_music"] = new FunctionInfo(this, 2);
            Functions["audio_stop_music"] = new FunctionInfo(this, 0);
            Functions["audio_master_gain"] = new FunctionInfo(this, 1);
            Functions["audio_music_gain"] = new FunctionInfo(this, 2);
            Functions["audio_sound_gain"] = new FunctionInfo(this, 3);
            Functions["audio_sound_pitch"] = new FunctionInfo(this, 2);
            Functions["audio_stop_all"] = new FunctionInfo(this, 0);
            Functions["audio_resume_all"] = new FunctionInfo(this, 0);
            Functions["audio_pause_all"] = new FunctionInfo(this, 0);
            Functions["audio_is_playing"] = new FunctionInfo(this, 1);
            Functions["audio_is_paused"] = new FunctionInfo(this, 1);
            Functions["audio_pause_music"] = new FunctionInfo(this, 0);
            Functions["audio_resume_music"] = new FunctionInfo(this, 0);
            Functions["audio_music_is_playing"] = new FunctionInfo(this, 0);
            Functions["audio_exists"] = new FunctionInfo(this, 1);
            Functions["audio_system"] = new FunctionInfo(this, 0);
            Functions["audio_emitter_get_gain"] = new FunctionInfo(this, 1);
            Functions["audio_emitter_get_pitch"] = new FunctionInfo(this, 1);
            Functions["audio_emitter_get_x"] = new FunctionInfo(this, 1);
            Functions["audio_emitter_get_y"] = new FunctionInfo(this, 1);
            Functions["audio_emitter_get_z"] = new FunctionInfo(this, 1);
            Functions["audio_emitter_get_vx"] = new FunctionInfo(this, 1);
            Functions["audio_emitter_get_vy"] = new FunctionInfo(this, 1);
            Functions["audio_emitter_get_vz"] = new FunctionInfo(this, 1);
            Functions["audio_listener_set_position"] = new FunctionInfo(this, 4);
            Functions["audio_listener_set_velocity"] = new FunctionInfo(this, 4);
            Functions["audio_listener_set_orientation"] = new FunctionInfo(this, 7);
            Functions["audio_listener_get_data"] = new FunctionInfo(this, 1);
            Functions["audio_set_master_gain"] = new FunctionInfo(this, 2);
            Functions["audio_get_master_gain"] = new FunctionInfo(this, 1);
            Functions["audio_sound_get_gain"] = new FunctionInfo(this, 1);
            Functions["audio_sound_get_pitch"] = new FunctionInfo(this, 1);
            Functions["audio_get_name"] = new FunctionInfo(this, 1);
            Functions["audio_sound_set_track_position"] = new FunctionInfo(this, 2);
            Functions["audio_sound_get_track_position"] = new FunctionInfo(this, 1);
            Functions["audio_group_load"] = new FunctionInfo(this, 1);
            Functions["audio_group_unload"] = new FunctionInfo(this, 1);
            Functions["audio_group_is_loaded"] = new FunctionInfo(this, 1);
            Functions["audio_group_load_progress"] = new FunctionInfo(this, 1);
            Functions["audio_group_name"] = new FunctionInfo(this, 1);
            Functions["audio_group_stop_all"] = new FunctionInfo(this, 1);
            Functions["audio_group_set_gain"] = new FunctionInfo(this, 3);
            Functions["audio_create_buffer_sound"] = new FunctionInfo(this, 6);
            Functions["audio_free_buffer_sound"] = new FunctionInfo(this, 1);
            Functions["audio_create_play_queue"] = new FunctionInfo(this, 3);
            Functions["audio_free_play_queue"] = new FunctionInfo(this, 1);
            Functions["audio_queue_sound"] = new FunctionInfo(this, 4);
            Functions["audio_create_stream"] = new FunctionInfo(this, 1);
            Functions["audio_destroy_stream"] = new FunctionInfo(this, 1);
            Functions["audio_start_recording"] = new FunctionInfo(this, 1);
            Functions["audio_stop_recording"] = new FunctionInfo(this, 1);
            Functions["audio_get_recorder_count"] = new FunctionInfo(this, 0);
            Functions["audio_get_recorder_info"] = new FunctionInfo(this, 1);
            Functions["audio_create_sync_group"] = new FunctionInfo(this, 1);
            Functions["audio_destroy_sync_group"] = new FunctionInfo(this, 1);
            Functions["audio_play_in_sync_group"] = new FunctionInfo(this, 2);
            Functions["audio_start_sync_group"] = new FunctionInfo(this, 1);
            Functions["audio_stop_sync_group"] = new FunctionInfo(this, 1);
            Functions["audio_pause_sync_group"] = new FunctionInfo(this, 1);
            Functions["audio_resume_sync_group"] = new FunctionInfo(this, 1);
            Functions["audio_sync_group_get_track_pos"] = new FunctionInfo(this, 1);
            Functions["audio_sync_group_debug"] = new FunctionInfo(this, 1);
            Functions["audio_sync_group_is_playing"] = new FunctionInfo(this, 1);
            Functions["audio_debug"] = new FunctionInfo(this, 1);
            Functions["audio_delete"] = new FunctionInfo(this, 1);
            Functions["font_name"] = new FunctionInfo(this, 1);
            Functions["font_exists"] = new FunctionInfo(this, 1);
            Functions["font_get_name"] = new FunctionInfo(this, 1);
            Functions["font_get_fontname"] = new FunctionInfo(this, 1);
            Functions["font_get_size"] = new FunctionInfo(this, 1);
            Functions["font_get_bold"] = new FunctionInfo(this, 1);
            Functions["font_get_italic"] = new FunctionInfo(this, 1);
            Functions["font_get_first"] = new FunctionInfo(this, 1);
            Functions["font_get_last"] = new FunctionInfo(this, 1);
            Functions["font_set_dynamic_texture_size"] = new FunctionInfo(this, 1);
            Functions["font_get_dynamic_texture_size"] = new FunctionInfo(this, 0);
            Functions["font_add_enable_aa"] = new FunctionInfo(this, 1);
            Functions["font_add_get_enable_aa"] = new FunctionInfo(this, 0);
            Functions["font_add"] = new FunctionInfo(this, 6);
            Functions["font_add_sprite"] = new FunctionInfo(this, 4);
            Functions["font_add_sprite_ext"] = new FunctionInfo(this, 4);
            Functions["font_replace_sprite"] = new FunctionInfo(this, 5);
            Functions["font_replace_sprite_ext"] = new FunctionInfo(this, 5);
            Functions["font_delete"] = new FunctionInfo(this, 1);
            Functions["script_exists"] = new FunctionInfo(this, 1);
            Functions["script_get_name"] = new FunctionInfo(this, 1);
            Functions["script_execute"] = new FunctionInfo(this, -1);
            Functions["path_name"] = new FunctionInfo(this, 1);
            Functions["path_exists"] = new FunctionInfo(this, 1);
            Functions["path_get_name"] = new FunctionInfo(this, 1);
            Functions["path_get_length"] = new FunctionInfo(this, 1);
            Functions["path_get_time"] = new FunctionInfo(this, 2);
            Functions["path_get_kind"] = new FunctionInfo(this, 1);
            Functions["path_get_closed"] = new FunctionInfo(this, 1);
            Functions["path_get_precision"] = new FunctionInfo(this, 1);
            Functions["path_get_number"] = new FunctionInfo(this, 1);
            Functions["path_get_point_x"] = new FunctionInfo(this, 2);
            Functions["path_get_point_y"] = new FunctionInfo(this, 2);
            Functions["path_get_point_speed"] = new FunctionInfo(this, 2);
            Functions["path_get_x"] = new FunctionInfo(this, 2);
            Functions["path_get_y"] = new FunctionInfo(this, 2);
            Functions["path_get_speed"] = new FunctionInfo(this, 2);
            Functions["path_set_kind"] = new FunctionInfo(this, 2);
            Functions["path_set_closed"] = new FunctionInfo(this, 2);
            Functions["path_set_precision"] = new FunctionInfo(this, 2);
            Functions["path_add"] = new FunctionInfo(this, 0);
            Functions["path_duplicate"] = new FunctionInfo(this, 1);
            Functions["path_delete"] = new FunctionInfo(this, 1);
            Functions["path_assign"] = new FunctionInfo(this, 2);
            Functions["path_append"] = new FunctionInfo(this, 2);
            Functions["path_add_point"] = new FunctionInfo(this, 4);
            Functions["path_insert_point"] = new FunctionInfo(this, 5);
            Functions["path_change_point"] = new FunctionInfo(this, 5);
            Functions["path_delete_point"] = new FunctionInfo(this, 2);
            Functions["path_clear_points"] = new FunctionInfo(this, 1);
            Functions["path_reverse"] = new FunctionInfo(this, 1);
            Functions["path_mirror"] = new FunctionInfo(this, 1);
            Functions["path_flip"] = new FunctionInfo(this, 1);
            Functions["path_rotate"] = new FunctionInfo(this, 2);
            Functions["path_rescale"] = new FunctionInfo(this, 3);
            Functions["path_shift"] = new FunctionInfo(this, 3);
            Functions["timeline_name"] = new FunctionInfo(this, 1);
            Functions["timeline_exists"] = new FunctionInfo(this, 1);
            Functions["timeline_get_name"] = new FunctionInfo(this, 1);
            Functions["timeline_add"] = new FunctionInfo(this, 0);
            Functions["timeline_delete"] = new FunctionInfo(this, 1);
            Functions["timeline_clear"] = new FunctionInfo(this, 1);
            Functions["timeline_moment_clear"] = new FunctionInfo(this, 2);
            Functions["timeline_moment_add_script"] = new FunctionInfo(this, 3);
            Functions["timeline_size"] = new FunctionInfo(this, 1);
            Functions["timeline_max_moment"] = new FunctionInfo(this, 1);
            Functions["object_name"] = new FunctionInfo(this, 1);
            Functions["object_exists"] = new FunctionInfo(this, 1);
            Functions["object_get_name"] = new FunctionInfo(this, 1);
            Functions["object_get_sprite"] = new FunctionInfo(this, 1);
            Functions["object_get_solid"] = new FunctionInfo(this, 1);
            Functions["object_get_visible"] = new FunctionInfo(this, 1);
            if (data?.GeneralInfo?.Major < 2)
            {
                Functions["object_set_depth"] = new FunctionInfo(this, 2);
                Functions["object_get_depth"] = new FunctionInfo(this, 1);
            }
            Functions["object_get_persistent"] = new FunctionInfo(this, 1);
            Functions["object_get_mask"] = new FunctionInfo(this, 1);
            Functions["object_get_parent"] = new FunctionInfo(this, 1);
            Functions["object_get_physics"] = new FunctionInfo(this, 1);
            Functions["object_is_ancestor"] = new FunctionInfo(this, 2);
            Functions["object_set_sprite"] = new FunctionInfo(this, 2);
            Functions["object_set_solid"] = new FunctionInfo(this, 2);
            Functions["object_set_visible"] = new FunctionInfo(this, 2);
            Functions["object_set_persistent"] = new FunctionInfo(this, 2);
            Functions["object_set_mask"] = new FunctionInfo(this, 2);
            Functions["object_set_collisions"] = new FunctionInfo(this, 2);
            Functions["room_name"] = new FunctionInfo(this, 1);
            Functions["room_exists"] = new FunctionInfo(this, 1);
            Functions["room_get_name"] = new FunctionInfo(this, 1);
            Functions["room_set_width"] = new FunctionInfo(this, 2);
            Functions["room_set_height"] = new FunctionInfo(this, 2);
            Functions["room_set_persistent"] = new FunctionInfo(this, 2);
            Functions["room_set_background_color"] = new FunctionInfo(this, 3);
            Functions["room_set_background_colour"] = new FunctionInfo(this, 3);
            if (data?.GeneralInfo?.Major < 2)
            {
                Functions["room_set_background"] = new FunctionInfo(this, 12);
                Functions["room_set_view"] = new FunctionInfo(this, 16, true);
            }
            if (data?.GeneralInfo?.Major >= 2)
            {
                Functions["room_set_viewport"] = new FunctionInfo(this, 7);
                Functions["room_get_viewport"] = new FunctionInfo(this, 2);
            }
            Functions["room_set_view_enabled"] = new FunctionInfo(this, 2);
            Functions["room_add"] = new FunctionInfo(this, 0);
            Functions["room_duplicate"] = new FunctionInfo(this, 1);
            Functions["room_assign"] = new FunctionInfo(this, 2);
            Functions["room_instance_add"] = new FunctionInfo(this, 4);
            Functions["room_instance_clear"] = new FunctionInfo(this, 1);
            Functions["asset_get_index"] = new FunctionInfo(this, 1);
            Functions["asset_get_type"] = new FunctionInfo(this, 1);
            if (data?.GeneralInfo?.Major < 2)
            {
                Functions["room_tile_add"] = new FunctionInfo(this, 9);
                Functions["room_tile_add_ext"] = new FunctionInfo(this, 12);
                Functions["room_tile_clear"] = new FunctionInfo(this, 1);
            }
            if (data?.GeneralInfo?.Major >= 2)
            {
                Functions["room_get_camera"] = new FunctionInfo(this, 2);
                Functions["room_set_camera"] = new FunctionInfo(this, 3);
            }
            if (data?.GeneralInfo?.Major < 2)
            {
                Functions["sound_play"] = new FunctionInfo(this, 1);
                Functions["sound_loop"] = new FunctionInfo(this, 1);
                Functions["sound_stop"] = new FunctionInfo(this, 1);
                Functions["sound_stop_all"] = new FunctionInfo(this, 0);
                Functions["sound_isplaying"] = new FunctionInfo(this, 1);
                Functions["sound_volume"] = new FunctionInfo(this, 2);
                Functions["sound_fade"] = new FunctionInfo(this, 3);
                Functions["sound_global_volume"] = new FunctionInfo(this, 1);
            }
            Functions["virtual_key_add"] = new FunctionInfo(this, 5);
            Functions["virtual_key_delete"] = new FunctionInfo(this, 1);
            Functions["virtual_key_show"] = new FunctionInfo(this, 1);
            Functions["virtual_key_hide"] = new FunctionInfo(this, 1);
            Functions["achievement_login"] = new FunctionInfo(this, 0);
            Functions["achievement_logout"] = new FunctionInfo(this, 0);
            Functions["achievement_post"] = new FunctionInfo(this, 2);
            Functions["achievement_increment"] = new FunctionInfo(this, 2);
            Functions["achievement_post_score"] = new FunctionInfo(this, 2);
            Functions["achievement_available"] = new FunctionInfo(this, 0);
            Functions["achievement_show_achievements"] = new FunctionInfo(this, 0);
            Functions["achievement_show_leaderboards"] = new FunctionInfo(this, 0);
            Functions["achievement_load_friends"] = new FunctionInfo(this, 0);
            Functions["achievement_load_leaderboard"] = new FunctionInfo(this, 4);
            Functions["achievement_send_challenge"] = new FunctionInfo(this, 5);
            Functions["achievement_load_progress"] = new FunctionInfo(this, 0);
            Functions["achievement_reset"] = new FunctionInfo(this, 0);
            Functions["achievement_login_status"] = new FunctionInfo(this, 0);
            Functions["achievement_get_pic"] = new FunctionInfo(this, 1);
            Functions["achievement_get_info"] = new FunctionInfo(this, 1);
            Functions["achievement_get_challenges"] = new FunctionInfo(this, 0);
            Functions["achievement_show_challenge_notifications"] = new FunctionInfo(this, 3);
            Functions["achievement_show"] = new FunctionInfo(this, 2);
            Functions["achievement_event"] = new FunctionInfo(this, 1);
            Functions["cloud_file_save"] = new FunctionInfo(this, 2);
            Functions["cloud_string_save"] = new FunctionInfo(this, 2);
            Functions["cloud_synchronise"] = new FunctionInfo(this, 0);
            Functions["url_get_domain"] = new FunctionInfo(this, 0);
            Functions["url_open"] = new FunctionInfo(this, 1);
            Functions["url_open_ext"] = new FunctionInfo(this, 2);
            Functions["url_open_full"] = new FunctionInfo(this, 3);
            Functions["ads_setup"] = new FunctionInfo(this, 2);
            Functions["ads_engagement_launch"] = new FunctionInfo(this, 0);
            Functions["ads_engagement_available"] = new FunctionInfo(this, 0);
            Functions["ads_engagement_active"] = new FunctionInfo(this, 0);
            Functions["ads_get_display_height"] = new FunctionInfo(this, 1);
            Functions["ads_get_display_width"] = new FunctionInfo(this, 1);
            Functions["ads_move"] = new FunctionInfo(this, 3);
            Functions["ads_interstitial_available"] = new FunctionInfo(this, 0);
            Functions["ads_interstitial_display"] = new FunctionInfo(this, 0);
            Functions["ads_enable"] = new FunctionInfo(this, 3);
            Functions["ads_disable"] = new FunctionInfo(this, 1);
            Functions["ads_event"] = new FunctionInfo(this, 1);
            Functions["ads_event_preload"] = new FunctionInfo(this, 1);
            Functions["shop_leave_rating"] = new FunctionInfo(this, 4);
            Functions["analytics_event"] = new FunctionInfo(this, 1);
            Functions["analytics_event_ext"] = new FunctionInfo(this, -1);
            Functions["ads_set_reward_callback"] = new FunctionInfo(this, 1);
            if (data?.GeneralInfo?.Major < 2)
            {
                Functions["draw_enable_alphablend"] = new FunctionInfo(this, 1);
            }
            Functions["draw_texture_flush"] = new FunctionInfo(this, 0);
            Functions["draw_flush"] = new FunctionInfo(this, 0);
            if (data?.GeneralInfo?.Major >= 2)
            {
                Functions["gpu_set_blendenable"] = new FunctionInfo(this, 1);
                Functions["gpu_set_ztestenable"] = new FunctionInfo(this, 1);
                Functions["gpu_set_zfunc"] = new FunctionInfo(this, 1);
                Functions["gpu_set_zwriteenable"] = new FunctionInfo(this, 1);
                Functions["gpu_set_fog"] = new FunctionInfo(this, 4);
                Functions["gpu_set_cullmode"] = new FunctionInfo(this, 1);
                Functions["gpu_set_blendmode"] = new FunctionInfo(this, 1);
                Functions["gpu_set_blendmode_ext"] = new FunctionInfo(this, 2);
                Functions["gpu_set_blendmode_ext_sepalpha"] = new FunctionInfo(this, 4);
                Functions["gpu_set_colorwriteenable"] = new FunctionInfo(this, -1);
                Functions["gpu_set_colourwriteenable"] = new FunctionInfo(this, -1);
                Functions["gpu_set_alphatestenable"] = new FunctionInfo(this, 1);
                Functions["gpu_set_alphatestref"] = new FunctionInfo(this, 1);
                Functions["gpu_set_alphatestfunc"] = new FunctionInfo(this, 1);
                Functions["gpu_set_texfilter"] = new FunctionInfo(this, 1);
                Functions["gpu_set_texfilter_ext"] = new FunctionInfo(this, 2);
                Functions["gpu_set_texrepeat"] = new FunctionInfo(this, 1);
                Functions["gpu_set_texrepeat_ext"] = new FunctionInfo(this, 2);
                Functions["gpu_set_tex_filter"] = new FunctionInfo(this, 1);
                Functions["gpu_set_tex_filter_ext"] = new FunctionInfo(this, 2);
                Functions["gpu_set_tex_repeat"] = new FunctionInfo(this, 1);
                Functions["gpu_set_tex_repeat_ext"] = new FunctionInfo(this, 2);
                Functions["gpu_set_tex_mip_filter"] = new FunctionInfo(this, 1);
                Functions["gpu_set_tex_mip_filter_ext"] = new FunctionInfo(this, 2);
                Functions["gpu_set_tex_mip_bias"] = new FunctionInfo(this, 1);
                Functions["gpu_set_tex_mip_bias_ext"] = new FunctionInfo(this, 2);
                Functions["gpu_set_tex_min_mip"] = new FunctionInfo(this, 1);
                Functions["gpu_set_tex_min_mip_ext"] = new FunctionInfo(this, 2);
                Functions["gpu_set_tex_max_mip"] = new FunctionInfo(this, 1);
                Functions["gpu_set_tex_max_mip_ext"] = new FunctionInfo(this, 2);
                Functions["gpu_set_tex_max_aniso"] = new FunctionInfo(this, 1);
                Functions["gpu_set_tex_max_aniso_ext"] = new FunctionInfo(this, 2);
                Functions["gpu_set_tex_mip_enable"] = new FunctionInfo(this, 1);
                Functions["gpu_set_tex_mip_enable_ext"] = new FunctionInfo(this, 2);
                Functions["gpu_get_blendenable"] = new FunctionInfo(this, 0);
                Functions["gpu_get_ztestenable"] = new FunctionInfo(this, 0);
                Functions["gpu_get_zfunc"] = new FunctionInfo(this, 0);
                Functions["gpu_get_zwriteenable"] = new FunctionInfo(this, 0);
                Functions["gpu_get_fog"] = new FunctionInfo(this, 0);
                Functions["gpu_get_cullmode"] = new FunctionInfo(this, 0);
                Functions["gpu_get_blendmode"] = new FunctionInfo(this, 0);
                Functions["gpu_get_blendmode_ext"] = new FunctionInfo(this, 0);
                Functions["gpu_get_blendmode_ext_sepalpha"] = new FunctionInfo(this, 0);
                Functions["gpu_get_blendmode_src"] = new FunctionInfo(this, 0);
                Functions["gpu_get_blendmode_dest"] = new FunctionInfo(this, 0);
                Functions["gpu_get_blendmode_srcalpha"] = new FunctionInfo(this, 0);
                Functions["gpu_get_blendmode_destalpha"] = new FunctionInfo(this, 0);
                Functions["gpu_get_colorwriteenable"] = new FunctionInfo(this, 0);
                Functions["gpu_get_colourwriteenable"] = new FunctionInfo(this, 0);
                Functions["gpu_get_alphatestenable"] = new FunctionInfo(this, 0);
                Functions["gpu_get_alphatestref"] = new FunctionInfo(this, 0);
                Functions["gpu_get_alphatestfunc"] = new FunctionInfo(this, 0);
                Functions["gpu_get_texfilter"] = new FunctionInfo(this, 0);
                Functions["gpu_get_texfilter_ext"] = new FunctionInfo(this, 1);
                Functions["gpu_get_texrepeat"] = new FunctionInfo(this, 0);
                Functions["gpu_get_texrepeat_ext"] = new FunctionInfo(this, 1);
                Functions["gpu_get_tex_filter"] = new FunctionInfo(this, 0);
                Functions["gpu_get_tex_filter_ext"] = new FunctionInfo(this, 1);
                Functions["gpu_get_tex_repeat"] = new FunctionInfo(this, 0);
                Functions["gpu_get_tex_repeat_ext"] = new FunctionInfo(this, 1);
                Functions["gpu_get_tex_mip_filter"] = new FunctionInfo(this, 0);
                Functions["gpu_get_tex_mip_filter_ext"] = new FunctionInfo(this, 1);
                Functions["gpu_get_tex_mip_bias"] = new FunctionInfo(this, 0);
                Functions["gpu_get_tex_mip_bias_ext"] = new FunctionInfo(this, 1);
                Functions["gpu_get_tex_min_mip"] = new FunctionInfo(this, 0);
                Functions["gpu_get_tex_min_mip_ext"] = new FunctionInfo(this, 1);
                Functions["gpu_get_tex_max_mip"] = new FunctionInfo(this, 0);
                Functions["gpu_get_tex_max_mip_ext"] = new FunctionInfo(this, 1);
                Functions["gpu_get_tex_max_aniso"] = new FunctionInfo(this, 0);
                Functions["gpu_get_tex_max_aniso_ext"] = new FunctionInfo(this, 1);
                Functions["gpu_get_tex_mip_enable"] = new FunctionInfo(this, 0);
                Functions["gpu_get_tex_mip_enable_ext"] = new FunctionInfo(this, 1);
                Functions["gpu_push_state"] = new FunctionInfo(this, 0);
                Functions["gpu_pop_state"] = new FunctionInfo(this, 0);
                Functions["gpu_get_state"] = new FunctionInfo(this, 0);
                Functions["gpu_set_state"] = new FunctionInfo(this, 1);
                Functions["draw_light_define_ambient"] = new FunctionInfo(this, 1);
                Functions["draw_light_define_direction"] = new FunctionInfo(this, 5);
                Functions["draw_light_define_point"] = new FunctionInfo(this, 6);
                Functions["draw_light_enable"] = new FunctionInfo(this, 2);
                Functions["draw_set_lighting"] = new FunctionInfo(this, 1);
                Functions["draw_light_get_ambient"] = new FunctionInfo(this, 0);
                Functions["draw_light_get"] = new FunctionInfo(this, 1);
                Functions["draw_get_lighting"] = new FunctionInfo(this, 0);
            }
            Functions["get_timer"] = new FunctionInfo(this, 0);
            Functions["os_get_config"] = new FunctionInfo(this, 0);
            Functions["os_get_info"] = new FunctionInfo(this, 0);
            Functions["os_get_language"] = new FunctionInfo(this, 0);
            Functions["os_get_region"] = new FunctionInfo(this, 0);
            Functions["os_check_permission"] = new FunctionInfo(this, 1);
            Functions["os_request_permission"] = new FunctionInfo(this, 1);
            Functions["display_get_dpi_x"] = new FunctionInfo(this, 0);
            Functions["display_get_dpi_y"] = new FunctionInfo(this, 0);
            Functions["display_set_gui_size"] = new FunctionInfo(this, 2);
            Functions["display_set_gui_maximise"] = new FunctionInfo(this, -1);
            Functions["display_set_gui_maximize"] = new FunctionInfo(this, -1);
            Functions["device_get_tilt_x"] = new FunctionInfo(this, 0);
            Functions["device_get_tilt_y"] = new FunctionInfo(this, 0);
            Functions["device_get_tilt_z"] = new FunctionInfo(this, 0);
            Functions["device_is_keypad_open"] = new FunctionInfo(this, 0);
            Functions["code_is_compiled"] = new FunctionInfo(this, 0);
            Functions["device_mouse_check_button"] = new FunctionInfo(this, 2);
            Functions["device_mouse_check_button_pressed"] = new FunctionInfo(this, 2);
            Functions["device_mouse_check_button_released"] = new FunctionInfo(this, 2);
            Functions["device_mouse_x"] = new FunctionInfo(this, 1);
            Functions["device_mouse_y"] = new FunctionInfo(this, 1);
            Functions["device_mouse_raw_x"] = new FunctionInfo(this, 1);
            Functions["device_mouse_raw_y"] = new FunctionInfo(this, 1);
            Functions["iap_activate"] = new FunctionInfo(this, 1);
            Functions["iap_status"] = new FunctionInfo(this, 0);
            Functions["iap_acquire"] = new FunctionInfo(this, 2);
            Functions["iap_consume"] = new FunctionInfo(this, 1);
            Functions["iap_is_purchased"] = new FunctionInfo(this, 1);
            Functions["iap_enumerate_products"] = new FunctionInfo(this, 1);
            Functions["iap_restore_all"] = new FunctionInfo(this, 0);
            Functions["iap_product_details"] = new FunctionInfo(this, 2);
            Functions["iap_purchase_details"] = new FunctionInfo(this, 2);
            Functions["iap_store_status"] = new FunctionInfo(this, 0);
            Functions["iap_product_status"] = new FunctionInfo(this, 1);
            Functions["iap_is_downloaded"] = new FunctionInfo(this, 1);
            Functions["iap_event_queue"] = new FunctionInfo(this, 0);
            Functions["iap_files_purchased"] = new FunctionInfo(this, 0);
            Functions["iap_product_files"] = new FunctionInfo(this, 2);
            Functions["facebook_init"] = new FunctionInfo(this, 0);
            Functions["facebook_login"] = new FunctionInfo(this, 2);
            Functions["facebook_status"] = new FunctionInfo(this, 0);
            Functions["facebook_graph_request"] = new FunctionInfo(this, 4);
            Functions["facebook_dialog"] = new FunctionInfo(this, 3);
            Functions["facebook_logout"] = new FunctionInfo(this, 0);
            Functions["facebook_launch_offerwall"] = new FunctionInfo(this, 1);
            Functions["facebook_post_message"] = new FunctionInfo(this, 7);
            Functions["facebook_send_invite"] = new FunctionInfo(this, 5);
            Functions["facebook_user_id"] = new FunctionInfo(this, 0);
            Functions["facebook_accesstoken"] = new FunctionInfo(this, 0);
            Functions["facebook_check_permission"] = new FunctionInfo(this, 1);
            Functions["facebook_request_read_permissions"] = new FunctionInfo(this, 1);
            Functions["facebook_request_publish_permissions"] = new FunctionInfo(this, 1);
            Functions["gamepad_is_supported"] = new FunctionInfo(this, 0, FunctionClassification.Gamepad);
            Functions["gamepad_get_device_count"] = new FunctionInfo(this, 0, FunctionClassification.Gamepad);
            Functions["gamepad_is_connected"] = new FunctionInfo(this, 1, FunctionClassification.Gamepad);
            Functions["gamepad_get_description"] = new FunctionInfo(this, 1, FunctionClassification.Gamepad);
            Functions["gamepad_get_button_threshold"] = new FunctionInfo(this, 1, FunctionClassification.Gamepad);
            Functions["gamepad_set_button_threshold"] = new FunctionInfo(this, 2, FunctionClassification.Gamepad);
            Functions["gamepad_get_axis_deadzone"] = new FunctionInfo(this, 1, FunctionClassification.Gamepad);
            Functions["gamepad_set_axis_deadzone"] = new FunctionInfo(this, 2, FunctionClassification.Gamepad);
            Functions["gamepad_button_count"] = new FunctionInfo(this, 1, FunctionClassification.Gamepad);
            Functions["gamepad_button_check"] = new FunctionInfo(this, 2, FunctionClassification.Gamepad);
            Functions["gamepad_button_check_pressed"] = new FunctionInfo(this, 2, FunctionClassification.Gamepad);
            Functions["gamepad_button_check_released"] = new FunctionInfo(this, 2, FunctionClassification.Gamepad);
            Functions["gamepad_button_value"] = new FunctionInfo(this, 2, FunctionClassification.Gamepad);
            Functions["gamepad_axis_count"] = new FunctionInfo(this, 1, FunctionClassification.Gamepad);
            Functions["gamepad_axis_value"] = new FunctionInfo(this, 2, FunctionClassification.Gamepad);
            Functions["gamepad_set_vibration"] = new FunctionInfo(this, 3, FunctionClassification.Gamepad);
            Functions["gamepad_set_colour"] = new FunctionInfo(this, 2, FunctionClassification.Gamepad);
            Functions["gamepad_set_color"] = new FunctionInfo(this, 2, FunctionClassification.Gamepad);
            Functions["gamepad_add_mapping_from_string"] = new FunctionInfo(this, 1, FunctionClassification.Gamepad);
            Functions["gamepad_add_mapping_from_file"] = new FunctionInfo(this, 1, FunctionClassification.Gamepad);
            Functions["gamepad_get_database"] = new FunctionInfo(this, 0, FunctionClassification.Gamepad);
            Functions["YoYo_OSPauseEvent"] = new FunctionInfo(this, 0);
            Functions["os_is_paused"] = new FunctionInfo(this, 0);
            Functions["window_has_focus"] = new FunctionInfo(this, 0);
            Functions["base64_encode"] = new FunctionInfo(this, 1);
            Functions["base64_decode"] = new FunctionInfo(this, 1);
            Functions["md5_string_unicode"] = new FunctionInfo(this, 1);
            Functions["md5_string_utf8"] = new FunctionInfo(this, 1);
            Functions["md5_file"] = new FunctionInfo(this, 1);
            Functions["os_is_network_connected"] = new FunctionInfo(this, 0);
            Functions["sha1_string_unicode"] = new FunctionInfo(this, 1);
            Functions["sha1_string_utf8"] = new FunctionInfo(this, 1);
            Functions["sha1_file"] = new FunctionInfo(this, 1);
            Functions["os_powersave_enable"] = new FunctionInfo(this, 1);
            Functions["os_lock_orientation"] = new FunctionInfo(this, 1);
            Functions["physics_world_create"] = new FunctionInfo(this, 1);
            Functions["physics_world_gravity"] = new FunctionInfo(this, 2);
            Functions["physics_world_update_speed"] = new FunctionInfo(this, 1);
            Functions["physics_world_update_iterations"] = new FunctionInfo(this, 1);
            Functions["physics_world_draw_debug"] = new FunctionInfo(this, 1);
            Functions["physics_pause_enable"] = new FunctionInfo(this, 1);
            Functions["physics_fixture_create"] = new FunctionInfo(this, 0);
            Functions["physics_fixture_set_kinematic"] = new FunctionInfo(this, 1);
            Functions["physics_fixture_set_awake"] = new FunctionInfo(this, 2);
            Functions["physics_fixture_set_density"] = new FunctionInfo(this, 2);
            Functions["physics_fixture_set_restitution"] = new FunctionInfo(this, 2);
            Functions["physics_fixture_set_friction"] = new FunctionInfo(this, 2);
            Functions["physics_fixture_set_collision_group"] = new FunctionInfo(this, 2);
            Functions["physics_fixture_set_sensor"] = new FunctionInfo(this, 2);
            Functions["physics_fixture_set_linear_damping"] = new FunctionInfo(this, 2);
            Functions["physics_fixture_set_angular_damping"] = new FunctionInfo(this, 2);
            Functions["physics_fixture_set_circle_shape"] = new FunctionInfo(this, 2);
            Functions["physics_fixture_set_box_shape"] = new FunctionInfo(this, 3);
            Functions["physics_fixture_set_edge_shape"] = new FunctionInfo(this, 5);
            Functions["physics_fixture_set_polygon_shape"] = new FunctionInfo(this, 1);
            Functions["physics_fixture_set_chain_shape"] = new FunctionInfo(this, 2);
            Functions["physics_fixture_add_point"] = new FunctionInfo(this, 3);
            Functions["physics_fixture_bind"] = new FunctionInfo(this, 2, true);
            Functions["physics_fixture_bind_ext"] = new FunctionInfo(this, 4, true);
            Functions["physics_fixture_delete"] = new FunctionInfo(this, 1);
            Functions["physics_apply_force"] = new FunctionInfo(this, 4, true);
            Functions["physics_apply_impulse"] = new FunctionInfo(this, 4, true);
            Functions["physics_apply_angular_impulse"] = new FunctionInfo(this, 1, true);
            Functions["physics_apply_local_force"] = new FunctionInfo(this, 4, true);
            Functions["physics_apply_local_impulse"] = new FunctionInfo(this, 4, true);
            Functions["physics_apply_torque"] = new FunctionInfo(this, 1, true);
            Functions["physics_mass_properties"] = new FunctionInfo(this, 4, true);
            Functions["physics_draw_debug"] = new FunctionInfo(this, 0, true);
            Functions["physics_test_overlap"] = new FunctionInfo(this, 4, true);
            Functions["physics_remove_fixture"] = new FunctionInfo(this, 2, false);
            Functions["physics_get_friction"] = new FunctionInfo(this, 1, true);
            Functions["physics_get_density"] = new FunctionInfo(this, 1, true);
            Functions["physics_get_restitution"] = new FunctionInfo(this, 1, true);
            Functions["physics_set_friction"] = new FunctionInfo(this, 2, true);
            Functions["physics_set_density"] = new FunctionInfo(this, 2, true);
            Functions["physics_set_restitution"] = new FunctionInfo(this, 2, true);
            Functions["physics_joint_enable_motor"] = new FunctionInfo(this, 2);
            Functions["physics_joint_get_value"] = new FunctionInfo(this, 2);
            Functions["physics_joint_set_value"] = new FunctionInfo(this, 3);
            Functions["physics_joint_distance_create"] = new FunctionInfo(this, 7);
            Functions["physics_joint_rope_create"] = new FunctionInfo(this, 8);
            Functions["physics_joint_revolute_create"] = new FunctionInfo(this, 11);
            Functions["physics_joint_prismatic_create"] = new FunctionInfo(this, 13);
            Functions["physics_joint_pulley_create"] = new FunctionInfo(this, 12);
            Functions["physics_joint_wheel_create"] = new FunctionInfo(this, 12);
            Functions["physics_joint_weld_create"] = new FunctionInfo(this, 8);
            Functions["physics_joint_friction_create"] = new FunctionInfo(this, 7);
            Functions["physics_joint_gear_create"] = new FunctionInfo(this, 5);
            Functions["physics_joint_delete"] = new FunctionInfo(this, 1);
            Functions["physics_particle_create"] = new FunctionInfo(this, 8);
            Functions["physics_particle_delete"] = new FunctionInfo(this, 1);
            Functions["physics_particle_delete_region_circle"] = new FunctionInfo(this, 3);
            Functions["physics_particle_delete_region_box"] = new FunctionInfo(this, 4);
            Functions["physics_particle_delete_region_poly"] = new FunctionInfo(this, 1);
            Functions["physics_particle_set_flags"] = new FunctionInfo(this, 2);
            Functions["physics_particle_set_category_flags"] = new FunctionInfo(this, 2);
            Functions["physics_particle_draw"] = new FunctionInfo(this, 4);
            Functions["physics_particle_draw_ext"] = new FunctionInfo(this, 9);
            Functions["physics_particle_count"] = new FunctionInfo(this, 0);
            Functions["physics_particle_get_data"] = new FunctionInfo(this, 2);
            Functions["physics_particle_get_data_particle"] = new FunctionInfo(this, 3);
            Functions["physics_particle_group_begin"] = new FunctionInfo(this, 12);
            Functions["physics_particle_group_circle"] = new FunctionInfo(this, 1);
            Functions["physics_particle_group_box"] = new FunctionInfo(this, 2);
            Functions["physics_particle_group_polygon"] = new FunctionInfo(this, 0);
            Functions["physics_particle_group_add_point"] = new FunctionInfo(this, 2);
            Functions["physics_particle_group_end"] = new FunctionInfo(this, 0);
            Functions["physics_particle_group_join"] = new FunctionInfo(this, 2);
            Functions["physics_particle_group_delete"] = new FunctionInfo(this, 1);
            Functions["physics_particle_group_count"] = new FunctionInfo(this, 1);
            Functions["physics_particle_group_get_data"] = new FunctionInfo(this, 3);
            Functions["physics_particle_group_get_mass"] = new FunctionInfo(this, 1);
            Functions["physics_particle_group_get_inertia"] = new FunctionInfo(this, 1);
            Functions["physics_particle_group_get_centre_x"] = new FunctionInfo(this, 1);
            Functions["physics_particle_group_get_centre_y"] = new FunctionInfo(this, 1);
            Functions["physics_particle_group_get_vel_x"] = new FunctionInfo(this, 1);
            Functions["physics_particle_group_get_vel_y"] = new FunctionInfo(this, 1);
            Functions["physics_particle_group_get_ang_vel"] = new FunctionInfo(this, 1);
            Functions["physics_particle_group_get_x"] = new FunctionInfo(this, 1);
            Functions["physics_particle_group_get_y"] = new FunctionInfo(this, 1);
            Functions["physics_particle_group_get_angle"] = new FunctionInfo(this, 1);
            Functions["physics_particle_set_group_flags"] = new FunctionInfo(this, 2);
            Functions["physics_particle_get_group_flags"] = new FunctionInfo(this, 1);
            Functions["physics_particle_get_max_count"] = new FunctionInfo(this, 0);
            Functions["physics_particle_get_radius"] = new FunctionInfo(this, 0);
            Functions["physics_particle_get_density"] = new FunctionInfo(this, 0);
            Functions["physics_particle_get_damping"] = new FunctionInfo(this, 0);
            Functions["physics_particle_get_gravity_scale"] = new FunctionInfo(this, 0);
            Functions["physics_particle_set_max_count"] = new FunctionInfo(this, 1);
            Functions["physics_particle_set_radius"] = new FunctionInfo(this, 1);
            Functions["physics_particle_set_density"] = new FunctionInfo(this, 1);
            Functions["physics_particle_set_damping"] = new FunctionInfo(this, 1);
            Functions["physics_particle_set_gravity_scale"] = new FunctionInfo(this, 1);
            Functions["win8_livetile_tile_notification"] = new FunctionInfo(this, 4);
            Functions["win8_livetile_badge_notification"] = new FunctionInfo(this, 1);
            Functions["win8_livetile_tile_clear"] = new FunctionInfo(this, 0);
            Functions["win8_livetile_badge_clear"] = new FunctionInfo(this, 0);
            Functions["win8_livetile_queue_enable"] = new FunctionInfo(this, 1);
            Functions["win8_secondarytile_pin"] = new FunctionInfo(this, 8);
            Functions["win8_secondarytile_badge_notification"] = new FunctionInfo(this, 2);
            Functions["win8_secondarytile_delete"] = new FunctionInfo(this, 1);
            Functions["win8_livetile_notification_begin"] = new FunctionInfo(this, 1);
            Functions["win8_livetile_notification_secondary_begin"] = new FunctionInfo(this, 2);
            Functions["win8_livetile_notification_expiry"] = new FunctionInfo(this, 1);
            Functions["win8_livetile_notification_tag"] = new FunctionInfo(this, 1);
            Functions["win8_livetile_notification_text_add"] = new FunctionInfo(this, 1);
            Functions["win8_livetile_notification_image_add"] = new FunctionInfo(this, 1);
            Functions["win8_livetile_notification_end"] = new FunctionInfo(this, 0);
            Functions["win8_appbar_enable"] = new FunctionInfo(this, 1);
            Functions["win8_appbar_add_element"] = new FunctionInfo(this, 6);
            Functions["win8_appbar_remove_element"] = new FunctionInfo(this, 1);
            Functions["win8_settingscharm_add_entry"] = new FunctionInfo(this, 2);
            Functions["win8_settingscharm_add_html_entry"] = new FunctionInfo(this, 3);
            Functions["win8_settingscharm_add_xaml_entry"] = new FunctionInfo(this, 5);
            Functions["win8_settingscharm_set_xaml_property"] = new FunctionInfo(this, 4);
            Functions["win8_settingscharm_get_xaml_property"] = new FunctionInfo(this, 3);
            Functions["win8_settingscharm_remove_entry"] = new FunctionInfo(this, 1);
            Functions["win8_share_image"] = new FunctionInfo(this, 4);
            Functions["win8_share_screenshot"] = new FunctionInfo(this, 3);
            Functions["win8_share_file"] = new FunctionInfo(this, 4);
            Functions["win8_share_url"] = new FunctionInfo(this, 4);
            Functions["win8_share_text"] = new FunctionInfo(this, 4);
            Functions["win8_search_enable"] = new FunctionInfo(this, 1);
            Functions["win8_search_disable"] = new FunctionInfo(this, 0);
            Functions["win8_search_add_suggestions"] = new FunctionInfo(this, 1);
            Functions["win8_device_touchscreen_available"] = new FunctionInfo(this, 0);
            Functions["win8_license_initialize_sandbox"] = new FunctionInfo(this, 1);
            Functions["win8_license_trial_version"] = new FunctionInfo(this, 0);
            Functions["winphone_license_trial_version"] = new FunctionInfo(this, 0);
            Functions["winphone_tile_title"] = new FunctionInfo(this, 1);
            Functions["winphone_tile_count"] = new FunctionInfo(this, 1);
            Functions["winphone_tile_back_title"] = new FunctionInfo(this, 1);
            Functions["winphone_tile_back_content"] = new FunctionInfo(this, 1);
            Functions["winphone_tile_back_content_wide"] = new FunctionInfo(this, 1);
            Functions["winphone_tile_front_image"] = new FunctionInfo(this, 1);
            Functions["winphone_tile_front_image_small"] = new FunctionInfo(this, 1);
            Functions["winphone_tile_front_image_wide"] = new FunctionInfo(this, 1);
            Functions["winphone_tile_back_image"] = new FunctionInfo(this, 1);
            Functions["winphone_tile_back_image_wide"] = new FunctionInfo(this, 1);
            Functions["winphone_tile_background_color"] = new FunctionInfo(this, 1);
            Functions["winphone_tile_background_colour"] = new FunctionInfo(this, 1);
            Functions["winphone_tile_icon_image"] = new FunctionInfo(this, 1);
            Functions["winphone_tile_small_icon_image"] = new FunctionInfo(this, 1);
            Functions["winphone_tile_wide_content"] = new FunctionInfo(this, 2);
            Functions["winphone_tile_cycle_images"] = new FunctionInfo(this, -1);
            Functions["winphone_tile_small_background_image"] = new FunctionInfo(this, 1);
            Functions["gml_release_mode"] = new FunctionInfo(this, 1, false);
            Functions["gml_pragma"] = new FunctionInfo(this, -1, false);
            Functions["buffer_create"] = new FunctionInfo(this, 3);
            Functions["buffer_delete"] = new FunctionInfo(this, 1);
            Functions["buffer_get_type"] = new FunctionInfo(this, 1);
            Functions["buffer_get_alignment"] = new FunctionInfo(this, 1);
            Functions["buffer_exists"] = new FunctionInfo(this, 1);
            Functions["buffer_write"] = new FunctionInfo(this, 3);
            Functions["buffer_read"] = new FunctionInfo(this, 2);
            Functions["buffer_poke"] = new FunctionInfo(this, 4);
            Functions["buffer_peek"] = new FunctionInfo(this, 3);
            Functions["buffer_seek"] = new FunctionInfo(this, 3);
            Functions["buffer_save"] = new FunctionInfo(this, 2);
            Functions["buffer_save_ext"] = new FunctionInfo(this, 4);
            Functions["buffer_load"] = new FunctionInfo(this, 1);
            Functions["buffer_load_ext"] = new FunctionInfo(this, 3);
            Functions["buffer_load_partial"] = new FunctionInfo(this, 5);
            Functions["buffer_copy"] = new FunctionInfo(this, 5);
            Functions["buffer_fill"] = new FunctionInfo(this, 5);
            Functions["buffer_get_size"] = new FunctionInfo(this, 1);
            Functions["buffer_tell"] = new FunctionInfo(this, 1);
            Functions["buffer_resize"] = new FunctionInfo(this, 2);
            Functions["buffer_md5"] = new FunctionInfo(this, 3);
            Functions["buffer_sha1"] = new FunctionInfo(this, 3);
            Functions["buffer_base64_encode"] = new FunctionInfo(this, 3);
            Functions["buffer_base64_decode"] = new FunctionInfo(this, 1);
            Functions["buffer_base64_decode_ext"] = new FunctionInfo(this, 3);
            Functions["buffer_sizeof"] = new FunctionInfo(this, 1);
            Functions["buffer_get_address"] = new FunctionInfo(this, 1);
            Functions["buffer_save_async"] = new FunctionInfo(this, 4);
            Functions["buffer_load_async"] = new FunctionInfo(this, 4);
            Functions["buffer_async_group_begin"] = new FunctionInfo(this, 1);
            Functions["buffer_async_group_end"] = new FunctionInfo(this, 0);
            Functions["buffer_async_group_option"] = new FunctionInfo(this, 2);
            Functions["buffer_get_surface"] = new FunctionInfo(this, (data.IsVersionAtLeast(2, 3, 1) ? 3 : 5)); // be more robust here
            Functions["buffer_set_surface"] = new FunctionInfo(this, 5);
            Functions["buffer_set_network_safe"] = new FunctionInfo(this, 2);
            Functions["buffer_create_from_vertex_buffer"] = new FunctionInfo(this, 3);
            Functions["buffer_create_from_vertex_buffer_ext"] = new FunctionInfo(this, 5);
            Functions["buffer_copy_from_vertex_buffer"] = new FunctionInfo(this, 5);
            Functions["buffer_compress"] = new FunctionInfo(this, 3);
            Functions["buffer_decompress"] = new FunctionInfo(this, 1);
            Functions["network_create_socket"] = new FunctionInfo(this, 1);
            Functions["network_create_socket_ext"] = new FunctionInfo(this, 2);
            Functions["network_create_server"] = new FunctionInfo(this, 3);
            Functions["network_create_server_raw"] = new FunctionInfo(this, 3);
            Functions["network_connect"] = new FunctionInfo(this, 3);
            Functions["network_connect_raw"] = new FunctionInfo(this, 3);
            Functions["network_send_packet"] = new FunctionInfo(this, 3);
            Functions["network_send_raw"] = new FunctionInfo(this, 3);
            Functions["network_send_broadcast"] = new FunctionInfo(this, 4);
            Functions["network_send_udp"] = new FunctionInfo(this, 5);
            Functions["network_send_udp_raw"] = new FunctionInfo(this, 5);
            Functions["network_resolve"] = new FunctionInfo(this, 1);
            Functions["network_receive_packet"] = new FunctionInfo(this, 3);
            Functions["network_destroy"] = new FunctionInfo(this, 1);
            Functions["network_set_timeout"] = new FunctionInfo(this, 3);
            Functions["network_get_address"] = new FunctionInfo(this, 1);
            Functions["network_set_config"] = new FunctionInfo(this, 2);
            Functions["steam_activate_overlay"] = new FunctionInfo(this, 1);
            Functions["steam_is_overlay_enabled"] = new FunctionInfo(this, 0);
            Functions["steam_is_overlay_activated"] = new FunctionInfo(this, 0);
            Functions["steam_get_persona_name"] = new FunctionInfo(this, 0);
            Functions["steam_initialised"] = new FunctionInfo(this, 0);
            Functions["steam_is_cloud_enabled_for_app"] = new FunctionInfo(this, 0);
            Functions["steam_is_cloud_enabled_for_account"] = new FunctionInfo(this, 0);
            Functions["steam_file_persisted"] = new FunctionInfo(this, 1);
            Functions["steam_get_quota_total"] = new FunctionInfo(this, 0);
            Functions["steam_get_quota_free"] = new FunctionInfo(this, 0);
            Functions["steam_file_write"] = new FunctionInfo(this, 3);
            Functions["steam_file_write_file"] = new FunctionInfo(this, 2);
            Functions["steam_file_read"] = new FunctionInfo(this, 1);
            Functions["steam_file_delete"] = new FunctionInfo(this, 1);
            Functions["steam_file_exists"] = new FunctionInfo(this, 1);
            Functions["steam_file_size"] = new FunctionInfo(this, 1);
            Functions["steam_file_share"] = new FunctionInfo(this, 1);
            Functions["steam_publish_workshop_file"] = new FunctionInfo(this, 4);
            Functions["steam_is_screenshot_requested"] = new FunctionInfo(this, 0);
            Functions["steam_send_screenshot"] = new FunctionInfo(this, 3);
            Functions["steam_is_user_logged_on"] = new FunctionInfo(this, 0);
            Functions["steam_get_user_steam_id"] = new FunctionInfo(this, 0);
            Functions["steam_user_owns_dlc"] = new FunctionInfo(this, 1);
            Functions["steam_user_installed_dlc"] = new FunctionInfo(this, 1);
            Functions["steam_set_achievement"] = new FunctionInfo(this, 1);
            Functions["steam_get_achievement"] = new FunctionInfo(this, 1);
            Functions["steam_clear_achievement"] = new FunctionInfo(this, 1);
            Functions["steam_set_stat_int"] = new FunctionInfo(this, 2);
            Functions["steam_set_stat_float"] = new FunctionInfo(this, 2);
            Functions["steam_set_stat_avg_rate"] = new FunctionInfo(this, 3);
            Functions["steam_get_stat_int"] = new FunctionInfo(this, 1);
            Functions["steam_get_stat_float"] = new FunctionInfo(this, 1);
            Functions["steam_get_stat_avg_rate"] = new FunctionInfo(this, 1);
            Functions["steam_reset_all_stats"] = new FunctionInfo(this, 0);
            Functions["steam_reset_all_stats_achievements"] = new FunctionInfo(this, 0);
            Functions["steam_stats_ready"] = new FunctionInfo(this, 0);
            Functions["steam_create_leaderboard"] = new FunctionInfo(this, 3);
            Functions["steam_upload_score"] = new FunctionInfo(this, 2);
            Functions["steam_upload_score_ext"] = new FunctionInfo(this, 3);
            Functions["steam_upload_score_buffer"] = new FunctionInfo(this, 3);
            Functions["steam_upload_score_buffer_ext"] = new FunctionInfo(this, 4);
            Functions["steam_download_scores_around_user"] = new FunctionInfo(this, 3);
            Functions["steam_download_scores"] = new FunctionInfo(this, 3);
            Functions["steam_download_friends_scores"] = new FunctionInfo(this, 1);
            Functions["steam_current_game_language"] = new FunctionInfo(this, 0);
            Functions["steam_available_languages"] = new FunctionInfo(this, 0);
            Functions["steam_activate_overlay_browser"] = new FunctionInfo(this, 1);
            Functions["steam_activate_overlay_user"] = new FunctionInfo(this, 2);
            Functions["steam_activate_overlay_store"] = new FunctionInfo(this, 1);
            Functions["steam_get_user_persona_name"] = new FunctionInfo(this, 1);
            Functions["steam_get_app_id"] = new FunctionInfo(this, 0);
            Functions["steam_get_user_account_id"] = new FunctionInfo(this, 0);
            Functions["steam_ugc_download"] = new FunctionInfo(this, 2);
            Functions["steam_ugc_create_item"] = new FunctionInfo(this, 2);
            Functions["steam_ugc_start_item_update"] = new FunctionInfo(this, 2);
            Functions["steam_ugc_set_item_title"] = new FunctionInfo(this, 2);
            Functions["steam_ugc_set_item_description"] = new FunctionInfo(this, 2);
            Functions["steam_ugc_set_item_visibility"] = new FunctionInfo(this, 2);
            Functions["steam_ugc_set_item_tags"] = new FunctionInfo(this, 2);
            Functions["steam_ugc_set_item_content"] = new FunctionInfo(this, 2);
            Functions["steam_ugc_set_item_preview"] = new FunctionInfo(this, 2);
            Functions["steam_ugc_submit_item_update"] = new FunctionInfo(this, 2);
            Functions["steam_ugc_get_item_update_progress"] = new FunctionInfo(this, 2);
            Functions["steam_ugc_subscribe_item"] = new FunctionInfo(this, 1);
            Functions["steam_ugc_unsubscribe_item"] = new FunctionInfo(this, 1);
            Functions["steam_ugc_num_subscribed_items"] = new FunctionInfo(this, 0);
            Functions["steam_ugc_get_subscribed_items"] = new FunctionInfo(this, 1);
            Functions["steam_ugc_get_item_install_info"] = new FunctionInfo(this, 2);
            Functions["steam_ugc_get_item_update_info"] = new FunctionInfo(this, 2);
            Functions["steam_ugc_request_item_details"] = new FunctionInfo(this, 2);
            Functions["steam_ugc_create_query_user"] = new FunctionInfo(this, 4);
            Functions["steam_ugc_create_query_user_ex"] = new FunctionInfo(this, 7);
            Functions["steam_ugc_create_query_all"] = new FunctionInfo(this, 3);
            Functions["steam_ugc_create_query_all_ex"] = new FunctionInfo(this, 5);
            Functions["steam_ugc_query_set_cloud_filename_filter"] = new FunctionInfo(this, 2);
            Functions["steam_ugc_query_set_match_any_tag"] = new FunctionInfo(this, 2);
            Functions["steam_ugc_query_set_search_text"] = new FunctionInfo(this, 2);
            Functions["steam_ugc_query_set_ranked_by_trend_days"] = new FunctionInfo(this, 2);
            Functions["steam_ugc_query_add_required_tag"] = new FunctionInfo(this, 2);
            Functions["steam_ugc_query_add_excluded_tag"] = new FunctionInfo(this, 2);
            Functions["steam_ugc_query_set_return_long_description"] = new FunctionInfo(this, 2);
            Functions["steam_ugc_query_set_return_total_only"] = new FunctionInfo(this, 2);
            Functions["steam_ugc_query_set_allow_cached_response"] = new FunctionInfo(this, 2);
            Functions["steam_ugc_send_query"] = new FunctionInfo(this, 1);
            Functions["shader_set"] = new FunctionInfo(this, 1);
            Functions["shader_get_name"] = new FunctionInfo(this, 1);
            Functions["shader_reset"] = new FunctionInfo(this, 0);
            Functions["shader_current"] = new FunctionInfo(this, 0);
            Functions["shader_is_compiled"] = new FunctionInfo(this, 1);
            Functions["shader_get_sampler_index"] = new FunctionInfo(this, 2);
            Functions["shader_get_uniform"] = new FunctionInfo(this, 2);
            Functions["shader_set_uniform_i"] = new FunctionInfo(this, -1);
            Functions["shader_set_uniform_i_array"] = new FunctionInfo(this, 2);
            Functions["shader_set_uniform_i1"] = new FunctionInfo(this, 1);
            Functions["shader_set_uniform_f"] = new FunctionInfo(this, -1);
            Functions["shader_set_uniform_f_array"] = new FunctionInfo(this, 2);
            Functions["shader_set_uniform_matrix"] = new FunctionInfo(this, 1);
            Functions["shader_set_uniform_matrix_array"] = new FunctionInfo(this, 2);
            Functions["texture_set_stage"] = new FunctionInfo(this, 2);
            Functions["texture_get_texel_width"] = new FunctionInfo(this, 1);
            Functions["texture_get_texel_height"] = new FunctionInfo(this, 1);
            Functions["shaders_are_supported"] = new FunctionInfo(this, 0);
            Functions["vertex_format_begin"] = new FunctionInfo(this, 0);
            Functions["vertex_format_end"] = new FunctionInfo(this, 0);
            Functions["vertex_format_delete"] = new FunctionInfo(this, 1);
            Functions["vertex_format_add_position"] = new FunctionInfo(this, 0);
            Functions["vertex_format_add_position_3d"] = new FunctionInfo(this, 0);
            Functions["vertex_format_add_colour"] = new FunctionInfo(this, 0);
            Functions["vertex_format_add_color"] = new FunctionInfo(this, 0);
            Functions["vertex_format_add_normal"] = new FunctionInfo(this, 0);
            Functions["vertex_format_add_texcoord"] = new FunctionInfo(this, 0);
            Functions["vertex_format_add_textcoord"] = new FunctionInfo(this, 0);
            Functions["vertex_format_add_custom"] = new FunctionInfo(this, 2);
            Functions["vertex_create_buffer"] = new FunctionInfo(this, 0);
            Functions["vertex_create_buffer_ext"] = new FunctionInfo(this, 1);
            Functions["vertex_delete_buffer"] = new FunctionInfo(this, 1);
            Functions["vertex_begin"] = new FunctionInfo(this, 2);
            Functions["vertex_end"] = new FunctionInfo(this, 1);
            Functions["vertex_position"] = new FunctionInfo(this, 3);
            Functions["vertex_position_3d"] = new FunctionInfo(this, 4);
            Functions["vertex_colour"] = new FunctionInfo(this, 3);
            Functions["vertex_color"] = new FunctionInfo(this, 3);
            Functions["vertex_argb"] = new FunctionInfo(this, 2);
            Functions["vertex_texcoord"] = new FunctionInfo(this, 3);
            Functions["vertex_normal"] = new FunctionInfo(this, 4);
            Functions["vertex_float1"] = new FunctionInfo(this, 2);
            Functions["vertex_float2"] = new FunctionInfo(this, 3);
            Functions["vertex_float3"] = new FunctionInfo(this, 4);
            Functions["vertex_float4"] = new FunctionInfo(this, 5);
            Functions["vertex_ubyte4"] = new FunctionInfo(this, 5);
            Functions["vertex_submit"] = new FunctionInfo(this, 3);
            Functions["vertex_freeze"] = new FunctionInfo(this, 1);
            Functions["vertex_get_number"] = new FunctionInfo(this, 1);
            Functions["vertex_get_buffer_size"] = new FunctionInfo(this, 1);
            Functions["vertex_create_buffer_from_buffer"] = new FunctionInfo(this, 2);
            Functions["vertex_create_buffer_from_buffer_ext"] = new FunctionInfo(this, 4);
            Functions["push_local_notification"] = new FunctionInfo(this, 4);
            Functions["push_get_first_local_notification"] = new FunctionInfo(this, 1);
            Functions["push_get_next_local_notification"] = new FunctionInfo(this, 1);
            Functions["push_cancel_local_notification"] = new FunctionInfo(this, 1);
            Functions["skeleton_animation_set"] = new FunctionInfo(this, 1, true);
            Functions["skeleton_animation_get"] = new FunctionInfo(this, 0, true);
            Functions["skeleton_animation_mix"] = new FunctionInfo(this, 3, true);
            Functions["skeleton_animation_set_ext"] = new FunctionInfo(this, 2, true);
            Functions["skeleton_animation_get_ext"] = new FunctionInfo(this, 1, true);
            Functions["skeleton_animation_get_duration"] = new FunctionInfo(this, 1, true);
            Functions["skeleton_animation_get_frames"] = new FunctionInfo(this, 1, true);
            Functions["skeleton_animation_clear"] = new FunctionInfo(this, 1, true);
            Functions["skeleton_skin_set"] = new FunctionInfo(this, 1, true);
            Functions["skeleton_skin_get"] = new FunctionInfo(this, 0, true);
            Functions["skeleton_attachment_set"] = new FunctionInfo(this, 2, true);
            Functions["skeleton_attachment_get"] = new FunctionInfo(this, 1, true);
            Functions["skeleton_attachment_create"] = new FunctionInfo(this, 8, true);
            Functions["skeleton_collision_draw_set"] = new FunctionInfo(this, 1, true);
            Functions["skeleton_bone_data_get"] = new FunctionInfo(this, 2, true);
            Functions["skeleton_bone_data_set"] = new FunctionInfo(this, 2, true);
            Functions["skeleton_bone_state_get"] = new FunctionInfo(this, 2, true);
            Functions["skeleton_bone_state_set"] = new FunctionInfo(this, 2, true);
            Functions["draw_skeleton"] = new FunctionInfo(this, 11);
            Functions["draw_skeleton_time"] = new FunctionInfo(this, 11);
            Functions["draw_skeleton_instance"] = new FunctionInfo(this, 11);
            Functions["draw_skeleton_collision"] = new FunctionInfo(this, 9);
            Functions["skeleton_animation_list"] = new FunctionInfo(this, 2);
            Functions["skeleton_skin_list"] = new FunctionInfo(this, 2);
            Functions["skeleton_slot_data"] = new FunctionInfo(this, 2);
            Functions["skeleton_animation_get_frame"] = new FunctionInfo(this, 1, true);
            Functions["skeleton_animation_set_frame"] = new FunctionInfo(this, 2, true);
            Functions["skeleton_get_minmax"] = new FunctionInfo(this, 0, true);
            Functions["skeleton_get_num_bounds"] = new FunctionInfo(this, 0, true);
            Functions["skeleton_get_bounds"] = new FunctionInfo(this, 1, true);
            Functions["yyg_player_run"] = new FunctionInfo(this, 4, true);
            Functions["yyg_player_restarted"] = new FunctionInfo(this, 0, false);
            Functions["yyg_player_launch_args"] = new FunctionInfo(this, 0, false);
            Functions["extension_stubfunc_real"] = new FunctionInfo(this, -1);
            Functions["extension_stubfunc_string"] = new FunctionInfo(this, -1);
            Functions["ps4_share_screenshot_enable"] = new FunctionInfo(this, 1);
            Functions["ps4_share_video_enable"] = new FunctionInfo(this, 1);
            Functions["ps4_gamepad_reset_colour"] = new FunctionInfo(this, 1);
            Functions["video_open"] = new FunctionInfo(this, 1);
            Functions["video_close"] = new FunctionInfo(this, 0);
            Functions["video_draw"] = new FunctionInfo(this, 0);
            Functions["video_set_volume"] = new FunctionInfo(this, 1);
            Functions["psn_get_leaderboard_score_range"] = new FunctionInfo(this, 4);
            Functions["psn_default_user_name"] = new FunctionInfo(this, 0);
            Functions["psn_name_for_pad"] = new FunctionInfo(this, 1);
            Functions["psn_unlock_trophy"] = new FunctionInfo(this, 2);
            Functions["psn_init_np_libs"] = new FunctionInfo(this, -1);
            Functions["psn_exit_np_libs"] = new FunctionInfo(this, 0);
            Functions["psn_get_leaderboard_score"] = new FunctionInfo(this, 2);
            Functions["psn_post_leaderboard_score"] = new FunctionInfo(this, 3);
            Functions["psn_post_leaderboard_score_comment"] = new FunctionInfo(this, 4);
            Functions["psn_check_np_availability"] = new FunctionInfo(this, 2);
            Functions["psn_tick_error_dialog"] = new FunctionInfo(this, 0);
            Functions["psn_get_friends_scores"] = new FunctionInfo(this, 4);
            Functions["psn_name_for_user"] = new FunctionInfo(this, 1);
            Functions["psn_default_user"] = new FunctionInfo(this, 0);
            Functions["psn_user_for_pad"] = new FunctionInfo(this, 1);
            Functions["psn_tick"] = new FunctionInfo(this, 0);
            Functions["psn_np_status"] = new FunctionInfo(this, 1);
            Functions["psn_show_error_dialog"] = new FunctionInfo(this, 1);
            Functions["psn_check_free_space"] = new FunctionInfo(this, 2);
            Functions["psn_init_leaderboard"] = new FunctionInfo(this, 1);
            Functions["psn_np_check_plus"] = new FunctionInfo(this, 3);
            Functions["psn_np_commerce_dialog_open"] = new FunctionInfo(this, 3);
            Functions["psn_np_commerce_dialog_open_on_product"] = new FunctionInfo(this, 3);
            Functions["psn_np_commerce_dialog_tick"] = new FunctionInfo(this, 0);
            Functions["psn_np_notify_plus_feature"] = new FunctionInfo(this, 3);
            Functions["psn_set_content_restriction"] = new FunctionInfo(this, 1);
            Functions["psn_load_modules"] = new FunctionInfo(this, 0);
            Functions["psn_get_avatar_url"] = new FunctionInfo(this, 1);
            Functions["psn_get_tus_data"] = new FunctionInfo(this, 2);
            Functions["psn_set_tus_data"] = new FunctionInfo(this, 4);
            Functions["psn_get_tus_variable"] = new FunctionInfo(this, 2);
            Functions["psn_set_tus_variable"] = new FunctionInfo(this, 3);
            Functions["psn_delete_tus_data"] = new FunctionInfo(this, 2);
            Functions["psn_get_entitlement_list"] = new FunctionInfo(this, 0);
            Functions["matchmaking_reset_create_params"] = new FunctionInfo(this, 0);
            Functions["matchmaking_add_create_param"] = new FunctionInfo(this, 2);
            Functions["matchmaking_session_create"] = new FunctionInfo(this, 2);
            Functions["matchmaking_session_get_users"] = new FunctionInfo(this, 1);
            Functions["matchmaking_session_get_owner"] = new FunctionInfo(this, 1);
            Functions["matchmaking_session_get_ping_info"] = new FunctionInfo(this, 1);
            Functions["matchmaking_session_set_hidden"] = new FunctionInfo(this, 2);
            Functions["matchmaking_session_set_closed"] = new FunctionInfo(this, 1);
            Functions["matchmaking_session_set_open"] = new FunctionInfo(this, 1);
            Functions["matchmaking_reset_find_params"] = new FunctionInfo(this, 0);
            Functions["matchmaking_add_find_param"] = new FunctionInfo(this, 3);
            Functions["matchmaking_session_find"] = new FunctionInfo(this, 0);
            Functions["matchmaking_session_join"] = new FunctionInfo(this, 1);
            Functions["matchmaking_session_leave"] = new FunctionInfo(this, 1);
            Functions["matchmaking_session_update"] = new FunctionInfo(this, 1);
            Functions["matchmaking_start"] = new FunctionInfo(this, -1);
            Functions["matchmaking_stop"] = new FunctionInfo(this, 0);
            Functions["matchmaking_session_invite_start"] = new FunctionInfo(this, 1);
            Functions["matchmaking_send_invites_no_ui"] = new FunctionInfo(this, 4);
            Functions["matchmaking_send_invites"] = new FunctionInfo(this, 3);
            Functions["matchmaking_tick_invites"] = new FunctionInfo(this, 0);
            Functions["matchmaking_join_invite"] = new FunctionInfo(this, 1);
            Functions["psn_content_restriction_add"] = new FunctionInfo(this, 2);
            Functions["psn_net_check"] = new FunctionInfo(this, 1);
            Functions["psn_setup_trophies"] = new FunctionInfo(this, 0);
            Functions["psn_init_trophy"] = new FunctionInfo(this, -1);
            Functions["psn_get_trophy_unlock_state"] = new FunctionInfo(this, 1);
            Functions["xboxone_get_user_count"] = new FunctionInfo(this, 0);
            Functions["xboxone_get_user"] = new FunctionInfo(this, 1);
            Functions["xboxone_get_activating_user"] = new FunctionInfo(this, 0);
            Functions["xboxone_user_is_active"] = new FunctionInfo(this, 1);
            Functions["xboxone_user_is_guest"] = new FunctionInfo(this, 1);
            Functions["xboxone_user_is_signed_in"] = new FunctionInfo(this, 1);
            Functions["xboxone_user_is_remote"] = new FunctionInfo(this, 1);
            Functions["xboxone_gamedisplayname_for_user"] = new FunctionInfo(this, 1);
            Functions["xboxone_appdisplayname_for_user"] = new FunctionInfo(this, 1);
            Functions["xboxone_agegroup_for_user"] = new FunctionInfo(this, 1);
            Functions["xboxone_gamerscore_for_user"] = new FunctionInfo(this, 1);
            Functions["xboxone_reputation_for_user"] = new FunctionInfo(this, 1);
            Functions["xboxone_user_for_pad"] = new FunctionInfo(this, 1);
            Functions["xboxone_pad_count_for_user"] = new FunctionInfo(this, 1);
            Functions["xboxone_sponsor_for_user"] = new FunctionInfo(this, 1);
            Functions["xboxone_pad_for_user"] = new FunctionInfo(this, 2);
            Functions["xboxone_show_account_picker"] = new FunctionInfo(this, 2);
            Functions["xboxone_sprite_add_from_gamerpicture"] = new FunctionInfo(this, 4);
            Functions["xboxone_show_profile_card_for_user"] = new FunctionInfo(this, 2);
            Functions["xboxone_set_savedata_user"] = new FunctionInfo(this, 1);
            Functions["xboxone_get_savedata_user"] = new FunctionInfo(this, 0);
            Functions["xboxone_get_file_error"] = new FunctionInfo(this, 0);
            Functions["xboxone_was_terminated"] = new FunctionInfo(this, 0);
            Functions["xboxone_was_closed_by_user"] = new FunctionInfo(this, 0);
            Functions["xboxone_is_suspending"] = new FunctionInfo(this, 0);
            Functions["xboxone_is_constrained"] = new FunctionInfo(this, 0);
            Functions["xboxone_suspend"] = new FunctionInfo(this, 0);
            Functions["xboxone_show_help"] = new FunctionInfo(this, 1);
            Functions["xboxone_license_trial_version"] = new FunctionInfo(this, 0);
            Functions["xboxone_license_trial_user"] = new FunctionInfo(this, 0);
            Functions["xboxone_license_trial_time_remaining"] = new FunctionInfo(this, 0);
            Functions["xboxone_check_privilege"] = new FunctionInfo(this, 3);
            Functions["xboxone_user_id_for_user"] = new FunctionInfo(this, 1);
            Functions["xboxone_fire_event"] = new FunctionInfo(this, -1);
            Functions["xboxone_get_stats_for_user"] = new FunctionInfo(this, -1);
            Functions["xboxone_stats_setup"] = new FunctionInfo(this, 3);
            Functions["xboxone_stats_set_stat_real"] = new FunctionInfo(this, 3);
            Functions["xboxone_stats_set_stat_int"] = new FunctionInfo(this, 3);
            Functions["xboxone_stats_set_stat_string"] = new FunctionInfo(this, 3);
            Functions["xboxone_stats_delete_stat"] = new FunctionInfo(this, 2);
            Functions["xboxone_stats_get_stat"] = new FunctionInfo(this, 2);
            Functions["xboxone_stats_get_stat_names"] = new FunctionInfo(this, 1);
            Functions["xboxone_stats_add_user"] = new FunctionInfo(this, 1);
            Functions["xboxone_stats_remove_user"] = new FunctionInfo(this, 1);
            Functions["xboxone_stats_flush_user"] = new FunctionInfo(this, 2);
            Functions["xboxone_stats_get_leaderboard"] = new FunctionInfo(this, 6);
            Functions["xboxone_stats_get_social_leaderboard"] = new FunctionInfo(this, 7);
            Functions["xboxone_achievements_set_progress"] = new FunctionInfo(this, 3);
            Functions["xboxone_set_rich_presence"] = new FunctionInfo(this, -1);
            Functions["xboxone_read_player_leaderboard"] = new FunctionInfo(this, 4);
            Functions["xboxone_matchmaking_create"] = new FunctionInfo(this, -1);
            Functions["xboxone_matchmaking_find"] = new FunctionInfo(this, -1);
            Functions["xboxone_matchmaking_start"] = new FunctionInfo(this, 1);
            Functions["xboxone_matchmaking_stop"] = new FunctionInfo(this, 1);
            Functions["xboxone_matchmaking_session_get_users"] = new FunctionInfo(this, 1);
            Functions["xboxone_matchmaking_session_leave"] = new FunctionInfo(this, 1);
            Functions["xboxone_matchmaking_send_invites"] = new FunctionInfo(this, 3);
            Functions["xboxone_matchmaking_set_joinable_session"] = new FunctionInfo(this, 2);
            Functions["xboxone_matchmaking_join_invite"] = new FunctionInfo(this, 4);
            Functions["xboxone_matchmaking_join_session"] = new FunctionInfo(this, 3);
            Functions["xboxone_matchmaking_set_find_timeout"] = new FunctionInfo(this, 1);
            Functions["xboxone_debug"] = new FunctionInfo(this, 2);
            Functions["xboxone_chat_add_user_to_channel"] = new FunctionInfo(this, 2);
            Functions["xboxone_chat_remove_user_from_channel"] = new FunctionInfo(this, 2);
            Functions["xboxone_chat_set_muted"] = new FunctionInfo(this, 2);
            Functions["xboxone_product_show_details"] = new FunctionInfo(this, 2);
            Functions["xboxone_set_service_configuration_id"] = new FunctionInfo(this, 1);
            Functions["xboxone_generate_player_session_id"] = new FunctionInfo(this, 0);
            Functions["xboxone_package_check_license"] = new FunctionInfo(this, 1);
            Functions["xboxlive_get_user_count"] = new FunctionInfo(this, 0);
            Functions["xboxlive_get_user"] = new FunctionInfo(this, 1);
            Functions["xboxlive_get_activating_user"] = new FunctionInfo(this, 0);
            Functions["xboxlive_user_is_active"] = new FunctionInfo(this, 1);
            Functions["xboxlive_user_is_guest"] = new FunctionInfo(this, 1);
            Functions["xboxlive_user_is_signed_in"] = new FunctionInfo(this, -1);
            Functions["xboxlive_user_is_signing_in"] = new FunctionInfo(this, -1);
            Functions["xboxlive_user_is_remote"] = new FunctionInfo(this, 1);
            Functions["xboxlive_gamedisplayname_for_user"] = new FunctionInfo(this, -1);
            Functions["xboxlive_appdisplayname_for_user"] = new FunctionInfo(this, -1);
            Functions["xboxlive_gamertag_for_user"] = new FunctionInfo(this, -1);
            Functions["xboxlive_agegroup_for_user"] = new FunctionInfo(this, 1);
            Functions["xboxlive_gamerscore_for_user"] = new FunctionInfo(this, 1);
            Functions["xboxlive_reputation_for_user"] = new FunctionInfo(this, 1);
            Functions["xboxlive_user_for_pad"] = new FunctionInfo(this, 1);
            Functions["xboxlive_pad_count_for_user"] = new FunctionInfo(this, 1);
            Functions["xboxlive_sponsor_for_user"] = new FunctionInfo(this, 1);
            Functions["xboxlive_pad_for_user"] = new FunctionInfo(this, 2);
            Functions["xboxlive_show_account_picker"] = new FunctionInfo(this, -1);
            Functions["xboxlive_sprite_add_from_gamerpicture"] = new FunctionInfo(this, 4);
            Functions["xboxlive_show_profile_card_for_user"] = new FunctionInfo(this, 2);
            Functions["xboxlive_set_savedata_user"] = new FunctionInfo(this, 1);
            Functions["xboxlive_get_savedata_user"] = new FunctionInfo(this, 0);
            Functions["xboxlive_get_file_error"] = new FunctionInfo(this, 0);
            Functions["uwp_was_terminated"] = new FunctionInfo(this, 0);
            Functions["uwp_was_closed_by_user"] = new FunctionInfo(this, 0);
            Functions["uwp_is_suspending"] = new FunctionInfo(this, 0);
            Functions["uwp_is_constrained"] = new FunctionInfo(this, 0);
            Functions["uwp_suspend"] = new FunctionInfo(this, 0);
            Functions["uwp_show_help"] = new FunctionInfo(this, 1);
            Functions["uwp_license_trial_version"] = new FunctionInfo(this, 0);
            Functions["uwp_license_trial_user"] = new FunctionInfo(this, 0);
            Functions["uwp_license_trial_time_remaining"] = new FunctionInfo(this, 0);
            Functions["uwp_check_privilege"] = new FunctionInfo(this, 3);
            Functions["xboxlive_user_id_for_user"] = new FunctionInfo(this, 1);
            Functions["xboxlive_fire_event"] = new FunctionInfo(this, -1);
            Functions["xboxlive_get_stats_for_user"] = new FunctionInfo(this, -1);
            Functions["xboxlive_stats_setup"] = new FunctionInfo(this, 3);
            Functions["xboxlive_stats_set_stat_real"] = new FunctionInfo(this, 3);
            Functions["xboxlive_stats_set_stat_int"] = new FunctionInfo(this, 3);
            Functions["xboxlive_stats_set_stat_string"] = new FunctionInfo(this, 3);
            Functions["xboxlive_stats_delete_stat"] = new FunctionInfo(this, 2);
            Functions["xboxlive_stats_get_stat"] = new FunctionInfo(this, 2);
            Functions["xboxlive_stats_get_stat_names"] = new FunctionInfo(this, 1);
            Functions["xboxlive_stats_add_user"] = new FunctionInfo(this, 1);
            Functions["xboxlive_stats_remove_user"] = new FunctionInfo(this, 1);
            Functions["xboxlive_stats_flush_user"] = new FunctionInfo(this, 2);
            Functions["xboxlive_stats_get_leaderboard"] = new FunctionInfo(this, 6);
            Functions["xboxlive_stats_get_social_leaderboard"] = new FunctionInfo(this, 7);
            Functions["xboxlive_achievements_set_progress"] = new FunctionInfo(this, 3);
            Functions["xboxlive_set_rich_presence"] = new FunctionInfo(this, -1);
            Functions["xboxlive_read_player_leaderboard"] = new FunctionInfo(this, 4);
            Functions["xboxlive_matchmaking_create"] = new FunctionInfo(this, -1);
            Functions["xboxlive_matchmaking_find"] = new FunctionInfo(this, -1);
            Functions["xboxlive_matchmaking_start"] = new FunctionInfo(this, 1);
            Functions["xboxlive_matchmaking_stop"] = new FunctionInfo(this, 1);
            Functions["xboxlive_matchmaking_session_get_users"] = new FunctionInfo(this, 1);
            Functions["xboxlive_matchmaking_session_leave"] = new FunctionInfo(this, 1);
            Functions["xboxlive_matchmaking_send_invites"] = new FunctionInfo(this, 3);
            Functions["xboxlive_matchmaking_set_joinable_session"] = new FunctionInfo(this, 2);
            Functions["xboxlive_matchmaking_join_invite"] = new FunctionInfo(this, 3);
            Functions["xboxlive_matchmaking_join_session"] = new FunctionInfo(this, 3);
            Functions["xboxlive_matchmaking_set_find_timeout"] = new FunctionInfo(this, 1);
            Functions["xboxlive_chat_add_user_to_channel"] = new FunctionInfo(this, 2);
            Functions["xboxlive_chat_remove_user_from_channel"] = new FunctionInfo(this, 2);
            Functions["xboxlive_chat_set_muted"] = new FunctionInfo(this, 2);
            Functions["xboxlive_set_service_configuration_id"] = new FunctionInfo(this, 1);
            Functions["xboxlive_generate_player_session_id"] = new FunctionInfo(this, 0);
            Functions["browser_input_capture"] = new FunctionInfo(this, 1);
            if (data?.GeneralInfo?.Major >= 2)
            {
                Functions["layer_get_id"] = new FunctionInfo(this, 1);
                Functions["layer_get_id_at_depth"] = new FunctionInfo(this, 1);
                Functions["layer_get_depth"] = new FunctionInfo(this, 1);
                Functions["layer_create"] = new FunctionInfo(this, -1);
                Functions["layer_destroy"] = new FunctionInfo(this, 1);
                Functions["layer_destroy_instances"] = new FunctionInfo(this, 1);
                Functions["layer_add_instance"] = new FunctionInfo(this, 2);
                Functions["layer_has_instance"] = new FunctionInfo(this, 2);
                Functions["layer_set_visible"] = new FunctionInfo(this, 2);
                Functions["layer_get_visible"] = new FunctionInfo(this, 1);
                Functions["layer_exists"] = new FunctionInfo(this, 1);
                Functions["layer_x"] = new FunctionInfo(this, 2);
                Functions["layer_y"] = new FunctionInfo(this, 2);
                Functions["layer_get_x"] = new FunctionInfo(this, 1);
                Functions["layer_get_y"] = new FunctionInfo(this, 1);
                Functions["layer_hspeed"] = new FunctionInfo(this, 2);
                Functions["layer_vspeed"] = new FunctionInfo(this, 2);
                Functions["layer_get_hspeed"] = new FunctionInfo(this, 1);
                Functions["layer_get_vspeed"] = new FunctionInfo(this, 1);
                Functions["layer_sprite_get_id"] = new FunctionInfo(this, 2);
                Functions["layer_sprite_exists"] = new FunctionInfo(this, 2);
                Functions["layer_script_begin"] = new FunctionInfo(this, 2);
                Functions["layer_script_end"] = new FunctionInfo(this, 2);
                Functions["layer_shader"] = new FunctionInfo(this, 2);
                Functions["layer_get_script_begin"] = new FunctionInfo(this, 1);
                Functions["layer_get_script_end"] = new FunctionInfo(this, 1);
                Functions["layer_get_shader"] = new FunctionInfo(this, 1);
                Functions["layer_set_target_room"] = new FunctionInfo(this, 1);
                Functions["layer_get_target_room"] = new FunctionInfo(this, 0);
                Functions["layer_reset_target_room"] = new FunctionInfo(this, 0);
                Functions["layer_get_all"] = new FunctionInfo(this, 0);
                Functions["layer_get_all_elements"] = new FunctionInfo(this, 1);
                Functions["layer_get_name"] = new FunctionInfo(this, 1);
                Functions["layer_depth"] = new FunctionInfo(this, 2);
                Functions["layer_get_element_layer"] = new FunctionInfo(this, 1);
                Functions["layer_get_element_type"] = new FunctionInfo(this, 1);
                Functions["layer_element_move"] = new FunctionInfo(this, 2);
                Functions["layer_force_draw_depth"] = new FunctionInfo(this, 2);
                Functions["layer_is_draw_depth_forced"] = new FunctionInfo(this, 0);
                Functions["layer_get_forced_depth"] = new FunctionInfo(this, 0);
                Functions["layer_background_get_id"] = new FunctionInfo(this, 1);
                Functions["layer_background_exists"] = new FunctionInfo(this, 2);
                Functions["layer_background_create"] = new FunctionInfo(this, 2);
                Functions["layer_background_destroy"] = new FunctionInfo(this, 1);
                Functions["layer_background_visible"] = new FunctionInfo(this, 2);
                Functions["layer_background_htiled"] = new FunctionInfo(this, 2);
                Functions["layer_background_vtiled"] = new FunctionInfo(this, 2);
                Functions["layer_background_xscale"] = new FunctionInfo(this, 2);
                Functions["layer_background_yscale"] = new FunctionInfo(this, 2);
                Functions["layer_background_stretch"] = new FunctionInfo(this, 2);
                Functions["layer_background_blend"] = new FunctionInfo(this, 2);
                Functions["layer_background_alpha"] = new FunctionInfo(this, 2);
                Functions["layer_background_index"] = new FunctionInfo(this, 2);
                Functions["layer_background_speed"] = new FunctionInfo(this, 2);
                Functions["layer_background_sprite"] = new FunctionInfo(this, 2);
                Functions["layer_background_change"] = new FunctionInfo(this, 2);
                Functions["layer_background_get_visible"] = new FunctionInfo(this, 1);
                Functions["layer_background_get_sprite"] = new FunctionInfo(this, 1);
                Functions["layer_background_get_htiled"] = new FunctionInfo(this, 1);
                Functions["layer_background_get_vtiled"] = new FunctionInfo(this, 1);
                Functions["layer_background_get_stretch"] = new FunctionInfo(this, 1);
                Functions["layer_background_get_xscale"] = new FunctionInfo(this, 1);
                Functions["layer_background_get_yscale"] = new FunctionInfo(this, 1);
                Functions["layer_background_get_blend"] = new FunctionInfo(this, 1);
                Functions["layer_background_get_alpha"] = new FunctionInfo(this, 1);
                Functions["layer_background_get_index"] = new FunctionInfo(this, 1);
                Functions["layer_background_get_speed"] = new FunctionInfo(this, 1);
                Functions["layer_sprite_create"] = new FunctionInfo(this, 4);
                Functions["layer_sprite_destroy"] = new FunctionInfo(this, 1);
                Functions["layer_sprite_change"] = new FunctionInfo(this, 2);
                Functions["layer_sprite_index"] = new FunctionInfo(this, 2);
                Functions["layer_sprite_speed"] = new FunctionInfo(this, 2);
                Functions["layer_sprite_xscale"] = new FunctionInfo(this, 2);
                Functions["layer_sprite_yscale"] = new FunctionInfo(this, 2);
                Functions["layer_sprite_angle"] = new FunctionInfo(this, 2);
                Functions["layer_sprite_blend"] = new FunctionInfo(this, 2);
                Functions["layer_sprite_alpha"] = new FunctionInfo(this, 2);
                Functions["layer_sprite_x"] = new FunctionInfo(this, 2);
                Functions["layer_sprite_y"] = new FunctionInfo(this, 2);
                Functions["layer_sprite_get_sprite"] = new FunctionInfo(this, 1);
                Functions["layer_sprite_get_index"] = new FunctionInfo(this, 1);
                Functions["layer_sprite_get_speed"] = new FunctionInfo(this, 1);
                Functions["layer_sprite_get_xscale"] = new FunctionInfo(this, 1);
                Functions["layer_sprite_get_yscale"] = new FunctionInfo(this, 1);
                Functions["layer_sprite_get_angle"] = new FunctionInfo(this, 1);
                Functions["layer_sprite_get_blend"] = new FunctionInfo(this, 1);
                Functions["layer_sprite_get_alpha"] = new FunctionInfo(this, 1);
                Functions["layer_sprite_get_x"] = new FunctionInfo(this, 1);
                Functions["layer_sprite_get_y"] = new FunctionInfo(this, 1);
                Functions["layer_tilemap_get_id"] = new FunctionInfo(this, 1);
                Functions["layer_tilemap_exists"] = new FunctionInfo(this, 2);
                Functions["layer_tilemap_create"] = new FunctionInfo(this, 6);
                Functions["layer_tilemap_destroy"] = new FunctionInfo(this, 1);
                Functions["tilemap_tileset"] = new FunctionInfo(this, 2);
                Functions["tilemap_x"] = new FunctionInfo(this, 2);
                Functions["tilemap_y"] = new FunctionInfo(this, 2);
                Functions["tilemap_set"] = new FunctionInfo(this, 4);
                Functions["tilemap_set_at_pixel"] = new FunctionInfo(this, 4);
                Functions["tilemap_get_tileset"] = new FunctionInfo(this, 1);
                Functions["tilemap_get_tile_width"] = new FunctionInfo(this, 1);
                Functions["tilemap_get_tile_height"] = new FunctionInfo(this, 1);
                Functions["tilemap_get_width"] = new FunctionInfo(this, 1);
                Functions["tilemap_get_height"] = new FunctionInfo(this, 1);
                Functions["tilemap_set_width"] = new FunctionInfo(this, 2);
                Functions["tilemap_set_height"] = new FunctionInfo(this, 2);
                Functions["tilemap_get_x"] = new FunctionInfo(this, 1);
                Functions["tilemap_get_y"] = new FunctionInfo(this, 1);
                Functions["tilemap_get"] = new FunctionInfo(this, 3);
                Functions["tilemap_get_at_pixel"] = new FunctionInfo(this, 3);
                Functions["tilemap_get_cell_x_at_pixel"] = new FunctionInfo(this, 3);
                Functions["tilemap_get_cell_y_at_pixel"] = new FunctionInfo(this, 3);
                Functions["tilemap_clear"] = new FunctionInfo(this, 2);
                Functions["draw_tilemap"] = new FunctionInfo(this, 3, true);
                Functions["draw_tile"] = new FunctionInfo(this, 5, true);
                Functions["tilemap_set_global_mask"] = new FunctionInfo(this, 1);
                Functions["tilemap_get_global_mask"] = new FunctionInfo(this, 0);
                Functions["tilemap_set_mask"] = new FunctionInfo(this, 2);
                Functions["tilemap_get_mask"] = new FunctionInfo(this, 1);
                Functions["tilemap_get_frame"] = new FunctionInfo(this, 1);
                Functions["tile_set_empty"] = new FunctionInfo(this, 1);
                Functions["tile_set_index"] = new FunctionInfo(this, 2);
                Functions["tile_set_flip"] = new FunctionInfo(this, 2);
                Functions["tile_set_mirror"] = new FunctionInfo(this, 2);
                Functions["tile_set_rotate"] = new FunctionInfo(this, 2);
                Functions["tile_get_empty"] = new FunctionInfo(this, 1);
                Functions["tile_get_index"] = new FunctionInfo(this, 1);
                Functions["tile_get_flip"] = new FunctionInfo(this, 1);
                Functions["tile_get_mirror"] = new FunctionInfo(this, 1);
                Functions["tile_get_rotate"] = new FunctionInfo(this, 1);
                Functions["layer_tile_exists"] = new FunctionInfo(this, -1);
                Functions["layer_tile_create"] = new FunctionInfo(this, 8);
                Functions["layer_tile_destroy"] = new FunctionInfo(this, 1);
                Functions["layer_tile_change"] = new FunctionInfo(this, 2);
                Functions["layer_tile_xscale"] = new FunctionInfo(this, 2);
                Functions["layer_tile_yscale"] = new FunctionInfo(this, 2);
                Functions["layer_tile_blend"] = new FunctionInfo(this, 2);
                Functions["layer_tile_alpha"] = new FunctionInfo(this, 2);
                Functions["layer_tile_x"] = new FunctionInfo(this, 2);
                Functions["layer_tile_y"] = new FunctionInfo(this, 2);
                Functions["layer_tile_region"] = new FunctionInfo(this, 5);
                Functions["layer_tile_visible"] = new FunctionInfo(this, 2);
                Functions["layer_tile_get_sprite"] = new FunctionInfo(this, 1);
                Functions["layer_tile_get_xscale"] = new FunctionInfo(this, 1);
                Functions["layer_tile_get_yscale"] = new FunctionInfo(this, 1);
                Functions["layer_tile_get_blend"] = new FunctionInfo(this, 1);
                Functions["layer_tile_get_alpha"] = new FunctionInfo(this, 1);
                Functions["layer_tile_get_x"] = new FunctionInfo(this, 1);
                Functions["layer_tile_get_y"] = new FunctionInfo(this, 1);
                Functions["layer_tile_get_region"] = new FunctionInfo(this, 1);
                Functions["layer_tile_get_visible"] = new FunctionInfo(this, 1);
                Functions["layer_instance_get_instance"] = new FunctionInfo(this, 1);
                Functions["camera_create"] = new FunctionInfo(this, 0);
                Functions["camera_create_view"] = new FunctionInfo(this, -1);
                Functions["camera_destroy"] = new FunctionInfo(this, 1);
                Functions["camera_apply"] = new FunctionInfo(this, 1);
                Functions["camera_get_active"] = new FunctionInfo(this, 0);
                Functions["camera_get_default"] = new FunctionInfo(this, 0);
                Functions["camera_set_default"] = new FunctionInfo(this, 1);
                Functions["camera_set_view_mat"] = new FunctionInfo(this, 2);
                Functions["camera_set_proj_mat"] = new FunctionInfo(this, 2);
                Functions["camera_set_update_script"] = new FunctionInfo(this, 2);
                Functions["camera_set_begin_script"] = new FunctionInfo(this, 2);
                Functions["camera_set_end_script"] = new FunctionInfo(this, 2);
                Functions["camera_set_view_pos"] = new FunctionInfo(this, 3);
                Functions["camera_set_view_size"] = new FunctionInfo(this, 3);
                Functions["camera_set_view_speed"] = new FunctionInfo(this, 3);
                Functions["camera_set_view_border"] = new FunctionInfo(this, 3);
                Functions["camera_set_view_angle"] = new FunctionInfo(this, 2);
                Functions["camera_set_view_target"] = new FunctionInfo(this, 2);
                Functions["camera_get_view_mat"] = new FunctionInfo(this, 1);
                Functions["camera_get_proj_mat"] = new FunctionInfo(this, 1);
                Functions["camera_get_update_script"] = new FunctionInfo(this, 1);
                Functions["camera_get_begin_script"] = new FunctionInfo(this, 1);
                Functions["camera_get_end_script"] = new FunctionInfo(this, 1);
                Functions["camera_get_view_x"] = new FunctionInfo(this, 1);
                Functions["camera_get_view_y"] = new FunctionInfo(this, 1);
                Functions["camera_get_view_width"] = new FunctionInfo(this, 1);
                Functions["camera_get_view_height"] = new FunctionInfo(this, 1);
                Functions["camera_get_view_speed_x"] = new FunctionInfo(this, 1);
                Functions["camera_get_view_speed_y"] = new FunctionInfo(this, 1);
                Functions["camera_get_view_border_x"] = new FunctionInfo(this, 1);
                Functions["camera_get_view_border_y"] = new FunctionInfo(this, 1);
                Functions["camera_get_view_angle"] = new FunctionInfo(this, 1);
                Functions["camera_get_view_target"] = new FunctionInfo(this, 1);
                Functions["view_get_camera"] = new FunctionInfo(this, 1);
                Functions["view_get_visible"] = new FunctionInfo(this, 1);
                Functions["view_get_xport"] = new FunctionInfo(this, 1);
                Functions["view_get_yport"] = new FunctionInfo(this, 1);
                Functions["view_get_wport"] = new FunctionInfo(this, 1);
                Functions["view_get_hport"] = new FunctionInfo(this, 1);
                Functions["view_get_surface_id"] = new FunctionInfo(this, 1);
                Functions["view_set_camera"] = new FunctionInfo(this, 2);
                Functions["view_set_visible"] = new FunctionInfo(this, 2);
                Functions["view_set_xport"] = new FunctionInfo(this, 2);
                Functions["view_set_yport"] = new FunctionInfo(this, 2);
                Functions["view_set_wport"] = new FunctionInfo(this, 2);
                Functions["view_set_hport"] = new FunctionInfo(this, 2);
                Functions["view_set_surface_id"] = new FunctionInfo(this, 2);
            }
            Functions["switch_accounts_get_accounts"] = new FunctionInfo(this, 0);
            Functions["switch_accounts_get_nickname"] = new FunctionInfo(this, 1);
            Functions["switch_accounts_open_user"] = new FunctionInfo(this, 1);
            Functions["switch_accounts_close_user"] = new FunctionInfo(this, 1);
            Functions["switch_accounts_login_user"] = new FunctionInfo(this, 1);
            Functions["switch_accounts_is_user_open"] = new FunctionInfo(this, 1);
            Functions["switch_accounts_select_account"] = new FunctionInfo(this, 3);
            Functions["switch_save_data_mount"] = new FunctionInfo(this, 1);
            Functions["switch_save_data_commit"] = new FunctionInfo(this, 0);
            Functions["switch_save_data_unmount"] = new FunctionInfo(this, 0);
            Functions["switch_language_get_desired_language"] = new FunctionInfo(this, 0);
            Functions["switch_get_operation_mode"] = new FunctionInfo(this, 0);
            Functions["switch_get_performance_mode"] = new FunctionInfo(this, 0);
            Functions["switch_get_performance_config"] = new FunctionInfo(this, 1);
            Functions["switch_set_performance_config"] = new FunctionInfo(this, 2);
            Functions["switch_theme_set"] = new FunctionInfo(this, 1);
            Functions["switch_add_ssl_certificate"] = new FunctionInfo(this, 2);
            Functions["switch_set_local_network_mode"] = new FunctionInfo(this, 1);
            Functions["switch_controller_show_strap_guide"] = new FunctionInfo(this, 0);
            Functions["switch_controller_support_show"] = new FunctionInfo(this, 0);
            Functions["switch_controller_support_set_defaults"] = new FunctionInfo(this, 0);
            Functions["switch_controller_support_set_all"] = new FunctionInfo(this, 8);
            Functions["switch_controller_support_set_show_explain_text"] = new FunctionInfo(this, 1);
            Functions["switch_controller_support_set_show_identification_colours"] = new FunctionInfo(this, 1);
            Functions["switch_controller_support_set_show_identification_colors"] = new FunctionInfo(this, 1);
            Functions["switch_controller_support_set_identification_colour"] = new FunctionInfo(this, 2);
            Functions["switch_controller_support_set_identification_color"] = new FunctionInfo(this, 2);
            Functions["switch_controller_support_set_left_justify"] = new FunctionInfo(this, 1);
            Functions["switch_controller_support_set_permit_joycon_dual"] = new FunctionInfo(this, 1);
            Functions["switch_controller_support_set_singleplayer_only"] = new FunctionInfo(this, 1);
            Functions["switch_controller_support_set_maintain_connections"] = new FunctionInfo(this, 1);
            Functions["switch_controller_support_set_player_min"] = new FunctionInfo(this, 1);
            Functions["switch_controller_support_set_player_max"] = new FunctionInfo(this, 1);
            Functions["switch_controller_support_set_explain_text"] = new FunctionInfo(this, 2);
            Functions["switch_controller_support_get_player_count"] = new FunctionInfo(this, 0);
            Functions["switch_controller_support_get_selected_id"] = new FunctionInfo(this, 0);
            Functions["switch_controller_joycon_set_holdtype"] = new FunctionInfo(this, 1);
            Functions["switch_controller_joycon_get_holdtype"] = new FunctionInfo(this, 0);
            Functions["switch_controller_joycon_left_connected"] = new FunctionInfo(this, 1);
            Functions["switch_controller_joycon_right_connected"] = new FunctionInfo(this, 1);
            Functions["switch_controller_set_supported_styles"] = new FunctionInfo(this, 1);
            Functions["switch_controller_get_supported_styles"] = new FunctionInfo(this, 0);
            Functions["switch_controller_vibration_permitted"] = new FunctionInfo(this, 0);
            Functions["switch_controller_vibrate_hd"] = new FunctionInfo(this, 6);
            Functions["switch_controller_acceleration"] = new FunctionInfo(this, 2);
            Functions["switch_controller_angular_velocity"] = new FunctionInfo(this, 2);
            Functions["switch_controller_angle"] = new FunctionInfo(this, 2);
            Functions["switch_controller_direction"] = new FunctionInfo(this, 2);
            Functions["switch_controller_get_handheld_activation_mode"] = new FunctionInfo(this, 0);
            Functions["switch_controller_set_handheld_activation_mode"] = new FunctionInfo(this, 1);
            Functions["switch_controller_is_at_rest"] = new FunctionInfo(this, 1);
            Functions["switch_screenshot_disable"] = new FunctionInfo(this, 0);
            Functions["switch_screenshot_enable"] = new FunctionInfo(this, 0);
            Functions["switch_screenshot_set_orientation"] = new FunctionInfo(this, 1);
            Functions["switch_recording_enable"] = new FunctionInfo(this, 0);
            Functions["switch_recording_disable"] = new FunctionInfo(this, 0);
            Functions["switch_irsensor_set_mode"] = new FunctionInfo(this, 2);
            Functions["switch_irsensor_common_config_set_all"] = new FunctionInfo(this, 5);
            Functions["switch_irsensor_common_config_set_exposure_time"] = new FunctionInfo(this, 2);
            Functions["switch_irsensor_common_config_set_light_target"] = new FunctionInfo(this, 2);
            Functions["switch_irsensor_common_config_set_gain"] = new FunctionInfo(this, 2);
            Functions["switch_irsensor_common_config_is_negative_image_used"] = new FunctionInfo(this, 2);
            Functions["switch_irsensor_cluster_config_set_defaults"] = new FunctionInfo(this, 1);
            Functions["switch_irsensor_cluster_config_set_window_of_interest"] = new FunctionInfo(this, 5);
            Functions["switch_irsensor_cluster_config_set_object_pixel_count_min"] = new FunctionInfo(this, 2);
            Functions["switch_irsensor_cluster_config_set_object_pixel_count_max"] = new FunctionInfo(this, 2);
            Functions["switch_irsensor_cluster_config_set_object_intensity_min"] = new FunctionInfo(this, 2);
            Functions["switch_irsensor_cluster_config_set_external_light_filtering"] = new FunctionInfo(this, 2);
            Functions["switch_irsensor_cluster_create_state_buffer"] = new FunctionInfo(this, 1);
            Functions["switch_irsensor_moment_config_set_defaults"] = new FunctionInfo(this, 1);
            Functions["switch_irsensor_moment_config_set_window_of_interest"] = new FunctionInfo(this, 5);
            Functions["switch_irsensor_moment_config_set_preprocess"] = new FunctionInfo(this, 2);
            Functions["switch_irsensor_moment_config_set_preprocess_intensity_threshold"] = new FunctionInfo(this, 2);
            Functions["switch_irsensor_moment_create_state_buffer"] = new FunctionInfo(this, 1);
            Functions["switch_irsensor_image_config_set_defaults"] = new FunctionInfo(this, 1);
            Functions["switch_irsensor_image_config_set_format"] = new FunctionInfo(this, 2);
            Functions["switch_irsensor_image_config_set_orig_format"] = new FunctionInfo(this, 2);
            Functions["switch_irsensor_image_config_set_trimming_format"] = new FunctionInfo(this, 2);
            Functions["switch_irsensor_image_config_set_trimming_start"] = new FunctionInfo(this, 3);
            Functions["switch_irsensor_image_config_set_external_light_filtering"] = new FunctionInfo(this, 2);
            Functions["switch_irsensor_image_create_state_buffers"] = new FunctionInfo(this, 1);
            Functions["switch_irsensor_hand_config_set_mode"] = new FunctionInfo(this, 2);
            Functions["switch_irsensor_hand_create_state_buffers"] = new FunctionInfo(this, 1);
            Functions["switch_bnvib_load"] = new FunctionInfo(this, 1);
            Functions["switch_bnvib_unload"] = new FunctionInfo(this, 1);
            Functions["switch_bnvib_get_value"] = new FunctionInfo(this, 2);
            Functions["switch_bnvib_is_looping"] = new FunctionInfo(this, 1);
            Functions["switch_bnvib_get_loop_end_position"] = new FunctionInfo(this, 1);
            Functions["switch_bnvib_get_loop_interval"] = new FunctionInfo(this, 1);
            Functions["switch_bnvib_get_loop_start_position"] = new FunctionInfo(this, 1);
            Functions["switch_bnvib_get_length"] = new FunctionInfo(this, 1);
            Functions["switch_bnvib_get_sampling_rate"] = new FunctionInfo(this, 1);
            if (data?.GeneralInfo?.Major == 1 && data?.GeneralInfo?.Build <= 1763)
            {
                Functions["immersion_play_effect"] = new FunctionInfo(this, 1, FunctionClassification.Immersion);
                Functions["immersion_stop"] = new FunctionInfo(this, 0, FunctionClassification.Immersion);
            }

            // Moving on to constants
            Constants = new Dictionary<string, double>();
            Constants["self"] = -1.0;
            Constants["other"] = -2.0;
            Constants["all"] = -3.0;
            Constants["noone"] = -4.0;
            Constants["global"] = -5.0;
            Constants["pi"] = 3.1415926535897931;
            Constants["pr_pointlist"] = 1.0;
            Constants["pr_linelist"] = 2.0;
            Constants["pr_linestrip"] = 3.0;
            Constants["pr_trianglelist"] = 4.0;
            Constants["pr_trianglestrip"] = 5.0;
            Constants["pr_trianglefan"] = 6.0;
            Constants["c_aqua"] = 16776960.0;
            Constants["c_black"] = 0.0;
            Constants["c_blue"] = 16711680.0;
            Constants["c_dkgray"] = 4210752.0;
            Constants["c_fuchsia"] = 16711935.0;
            Constants["c_gray"] = 8421504.0;
            Constants["c_green"] = 32768.0;
            Constants["c_lime"] = 65280.0;
            Constants["c_ltgray"] = 12632256.0;
            Constants["c_maroon"] = 128.0;
            Constants["c_navy"] = 8388608.0;
            Constants["c_olive"] = 32896.0;
            Constants["c_purple"] = 8388736.0;
            Constants["c_red"] = 255.0;
            Constants["c_silver"] = 12632256.0;
            Constants["c_teal"] = 8421376.0;
            Constants["c_white"] = 16777215.0;
            Constants["c_yellow"] = 65535.0;
            Constants["c_orange"] = 4235519.0;
            if (data?.GeneralInfo?.Major < 2)
            {
                Constants["bm_complex"] = -1.0;
            }
            Constants["bm_normal"] = 0.0;
            Constants["bm_add"] = 1.0;
            Constants["bm_max"] = 2.0;
            Constants["bm_subtract"] = 3.0;
            Constants["bm_zero"] = 1.0;
            Constants["bm_one"] = 2.0;
            Constants["bm_src_color"] = 3.0;
            Constants["bm_inv_src_color"] = 4.0;
            Constants["bm_src_colour"] = 3.0;
            Constants["bm_inv_src_colour"] = 4.0;
            Constants["bm_src_alpha"] = 5.0;
            Constants["bm_inv_src_alpha"] = 6.0;
            Constants["bm_dest_alpha"] = 7.0;
            Constants["bm_inv_dest_alpha"] = 8.0;
            Constants["bm_dest_color"] = 9.0;
            Constants["bm_inv_dest_color"] = 10.0;
            Constants["bm_dest_colour"] = 9.0;
            Constants["bm_inv_dest_colour"] = 10.0;
            Constants["bm_src_alpha_sat"] = 11.0;
            if (data?.GeneralInfo?.Major >= 2)
            {
                Constants["tf_point"] = 0.0;
                Constants["tf_linear"] = 1.0;
                Constants["tf_anisotropic"] = 2.0;
                Constants["mip_off"] = 0.0;
                Constants["mip_on"] = 1.0;
                Constants["mip_markedonly"] = 2.0;
            }
            Constants["audio_falloff_none"] = 0.0;
            Constants["audio_falloff_inverse_distance"] = 1.0;
            Constants["audio_falloff_inverse_distance_clamped"] = 2.0;
            Constants["audio_falloff_linear_distance"] = 3.0;
            Constants["audio_falloff_linear_distance_clamped"] = 4.0;
            Constants["audio_falloff_exponent_distance"] = 5.0;
            Constants["audio_falloff_exponent_distance_clamped"] = 6.0;
            Constants["audio_old_system"] = 0.0;
            Constants["audio_new_system"] = 1.0;
            Constants["audio_mono"] = 0.0;
            Constants["audio_stereo"] = 1.0;
            Constants["audio_3d"] = 2.0;
            Constants["fa_left"] = 0.0;
            Constants["fa_center"] = 1.0;
            Constants["fa_right"] = 2.0;
            Constants["fa_top"] = 0.0;
            Constants["fa_middle"] = 1.0;
            Constants["fa_bottom"] = 2.0;
            Constants["mb_any"] = -1.0;
            Constants["mb_none"] = 0.0;
            Constants["mb_left"] = 1.0;
            Constants["mb_right"] = 2.0;
            Constants["mb_middle"] = 3.0;
            Constants["vk_nokey"] = 0.0;
            Constants["vk_anykey"] = 1.0;
            Constants["vk_enter"] = 13.0;
            Constants["vk_return"] = 13.0;
            Constants["vk_shift"] = 16.0;
            Constants["vk_control"] = 17.0;
            Constants["vk_alt"] = 18.0;
            Constants["vk_escape"] = 27.0;
            Constants["vk_space"] = 32.0;
            Constants["vk_backspace"] = 8.0;
            Constants["vk_tab"] = 9.0;
            Constants["vk_pause"] = 19.0;
            Constants["vk_printscreen"] = 44.0;
            Constants["vk_left"] = 37.0;
            Constants["vk_right"] = 39.0;
            Constants["vk_up"] = 38.0;
            Constants["vk_down"] = 40.0;
            Constants["vk_home"] = 36.0;
            Constants["vk_end"] = 35.0;
            Constants["vk_delete"] = 46.0;
            Constants["vk_insert"] = 45.0;
            Constants["vk_pageup"] = 33.0;
            Constants["vk_pagedown"] = 34.0;
            Constants["vk_f1"] = 112.0;
            Constants["vk_f2"] = 113.0;
            Constants["vk_f3"] = 114.0;
            Constants["vk_f4"] = 115.0;
            Constants["vk_f5"] = 116.0;
            Constants["vk_f6"] = 117.0;
            Constants["vk_f7"] = 118.0;
            Constants["vk_f8"] = 119.0;
            Constants["vk_f9"] = 120.0;
            Constants["vk_f10"] = 121.0;
            Constants["vk_f11"] = 122.0;
            Constants["vk_f12"] = 123.0;
            Constants["vk_numpad0"] = 96.0;
            Constants["vk_numpad1"] = 97.0;
            Constants["vk_numpad2"] = 98.0;
            Constants["vk_numpad3"] = 99.0;
            Constants["vk_numpad4"] = 100.0;
            Constants["vk_numpad5"] = 101.0;
            Constants["vk_numpad6"] = 102.0;
            Constants["vk_numpad7"] = 103.0;
            Constants["vk_numpad8"] = 104.0;
            Constants["vk_numpad9"] = 105.0;
            Constants["vk_divide"] = 111.0;
            Constants["vk_multiply"] = 106.0;
            Constants["vk_subtract"] = 109.0;
            Constants["vk_add"] = 107.0;
            Constants["vk_decimal"] = 110.0;
            Constants["vk_lshift"] = 160.0;
            Constants["vk_lcontrol"] = 162.0;
            Constants["vk_lalt"] = 164.0;
            Constants["vk_rshift"] = 161.0;
            Constants["vk_rcontrol"] = 163.0;
            Constants["vk_ralt"] = 165.0;
            Constants["gp_face1"] = 32769.0;
            Constants["gp_face2"] = 32770.0;
            Constants["gp_face3"] = 32771.0;
            Constants["gp_face4"] = 32772.0;
            Constants["gp_shoulderl"] = 32773.0;
            Constants["gp_shoulderr"] = 32774.0;
            Constants["gp_shoulderlb"] = 32775.0;
            Constants["gp_shoulderrb"] = 32776.0;
            Constants["gp_select"] = 32777.0;
            Constants["gp_start"] = 32778.0;
            Constants["gp_stickl"] = 32779.0;
            Constants["gp_stickr"] = 32780.0;
            Constants["gp_padu"] = 32781.0;
            Constants["gp_padd"] = 32782.0;
            Constants["gp_padl"] = 32783.0;
            Constants["gp_padr"] = 32784.0;
            Constants["gp_axislh"] = 32785.0;
            Constants["gp_axislv"] = 32786.0;
            Constants["gp_axisrh"] = 32787.0;
            Constants["gp_axisrv"] = 32788.0;
            Constants["ev_create"] = 0.0;
            Constants["ev_destroy"] = 1.0;
            Constants["ev_alarm"] = 2.0;
            Constants["ev_step"] = 3.0;
            Constants["ev_collision"] = 4.0;
            Constants["ev_keyboard"] = 5.0;
            Constants["ev_mouse"] = 6.0;
            Constants["ev_other"] = 7.0;
            Constants["ev_draw"] = 8.0;
            Constants["ev_keypress"] = 9.0;
            Constants["ev_keyrelease"] = 10.0;
            Constants["ev_trigger"] = 11.0;
            if (data?.GeneralInfo?.Major >= 2)
            {
                Constants["ev_cleanup"] = 11.0;
                Constants["ev_gesture"] = 13.0;
                Constants["ev_pre_create"] = 14.0;
            }
            Constants["ev_left_button"] = 0.0;
            Constants["ev_right_button"] = 1.0;
            Constants["ev_middle_button"] = 2.0;
            Constants["ev_no_button"] = 3.0;
            Constants["ev_left_press"] = 4.0;
            Constants["ev_right_press"] = 5.0;
            Constants["ev_middle_press"] = 6.0;
            Constants["ev_left_release"] = 7.0;
            Constants["ev_right_release"] = 8.0;
            Constants["ev_middle_release"] = 9.0;
            Constants["ev_mouse_enter"] = 10.0;
            Constants["ev_mouse_leave"] = 11.0;
            Constants["ev_global_press"] = 12.0;
            Constants["ev_global_release"] = 13.0;
            Constants["ev_joystick1_left"] = 16.0;
            Constants["ev_joystick1_right"] = 17.0;
            Constants["ev_joystick1_up"] = 18.0;
            Constants["ev_joystick1_down"] = 19.0;
            Constants["ev_joystick1_button1"] = 21.0;
            Constants["ev_joystick1_button2"] = 22.0;
            Constants["ev_joystick1_button3"] = 23.0;
            Constants["ev_joystick1_button4"] = 24.0;
            Constants["ev_joystick1_button5"] = 25.0;
            Constants["ev_joystick1_button6"] = 26.0;
            Constants["ev_joystick1_button7"] = 27.0;
            Constants["ev_joystick1_button8"] = 28.0;
            Constants["ev_joystick2_left"] = 31.0;
            Constants["ev_joystick2_right"] = 32.0;
            Constants["ev_joystick2_up"] = 33.0;
            Constants["ev_joystick2_down"] = 34.0;
            Constants["ev_joystick2_button1"] = 36.0;
            Constants["ev_joystick2_button2"] = 37.0;
            Constants["ev_joystick2_button3"] = 38.0;
            Constants["ev_joystick2_button4"] = 39.0;
            Constants["ev_joystick2_button5"] = 40.0;
            Constants["ev_joystick2_button6"] = 41.0;
            Constants["ev_joystick2_button7"] = 42.0;
            Constants["ev_joystick2_button8"] = 43.0;
            Constants["ev_global_left_button"] = 50.0;
            Constants["ev_global_right_button"] = 51.0;
            Constants["ev_global_middle_button"] = 52.0;
            Constants["ev_global_left_press"] = 53.0;
            Constants["ev_global_right_press"] = 54.0;
            Constants["ev_global_middle_press"] = 55.0;
            Constants["ev_global_left_release"] = 56.0;
            Constants["ev_global_right_release"] = 57.0;
            Constants["ev_global_middle_release"] = 58.0;
            Constants["ev_mouse_wheel_up"] = 60.0;
            Constants["ev_mouse_wheel_down"] = 61.0;
            Constants["ev_outside"] = 0.0;
            Constants["ev_boundary"] = 1.0;
            Constants["ev_game_start"] = 2.0;
            Constants["ev_game_end"] = 3.0;
            Constants["ev_room_start"] = 4.0;
            Constants["ev_room_end"] = 5.0;
            Constants["ev_no_more_lives"] = 6.0;
            Constants["ev_animation_end"] = 7.0;
            Constants["ev_end_of_path"] = 8.0;
            Constants["ev_no_more_health"] = 9.0;
            Constants["ev_user0"] = 10.0;
            Constants["ev_user1"] = 11.0;
            Constants["ev_user2"] = 12.0;
            Constants["ev_user3"] = 13.0;
            Constants["ev_user4"] = 14.0;
            Constants["ev_user5"] = 15.0;
            Constants["ev_user6"] = 16.0;
            Constants["ev_user7"] = 17.0;
            Constants["ev_user8"] = 18.0;
            Constants["ev_user9"] = 19.0;
            Constants["ev_user10"] = 20.0;
            Constants["ev_user11"] = 21.0;
            Constants["ev_user12"] = 22.0;
            Constants["ev_user13"] = 23.0;
            Constants["ev_user14"] = 24.0;
            Constants["ev_user15"] = 25.0;
            Constants["ev_close_button"] = 30.0;
            Constants["ev_step_normal"] = 0.0;
            Constants["ev_step_begin"] = 1.0;
            Constants["ev_step_end"] = 2.0;
            Constants["ev_gui"] = 64.0;
            Constants["ev_draw_begin"] = 72.0;
            Constants["ev_draw_end"] = 73.0;
            Constants["ev_gui_begin"] = 74.0;
            Constants["ev_gui_end"] = 75.0;
            Constants["ev_draw_pre"] = 76.0;
            Constants["ev_draw_post"] = 77.0;
            if (data?.GeneralInfo?.Major >= 2)
            {
                Constants["ev_gesture_tap"] = 0.0;
                Constants["ev_gesture_double_tap"] = 1.0;
                Constants["ev_gesture_drag_start"] = 2.0;
                Constants["ev_gesture_dragging"] = 3.0;
                Constants["ev_gesture_drag_end"] = 4.0;
                Constants["ev_gesture_flick"] = 5.0;
                Constants["ev_gesture_pinch_start"] = 6.0;
                Constants["ev_gesture_pinch_in"] = 7.0;
                Constants["ev_gesture_pinch_out"] = 8.0;
                Constants["ev_gesture_pinch_end"] = 9.0;
                Constants["ev_gesture_rotate_start"] = 10.0;
                Constants["ev_gesture_rotating"] = 11.0;
                Constants["ev_gesture_rotate_end"] = 12.0;
                Constants["ev_global_gesture_tap"] = 64.0;
                Constants["ev_global_gesture_double_tap"] = 65.0;
                Constants["ev_global_gesture_drag_start"] = 66.0;
                Constants["ev_global_gesture_dragging"] = 67.0;
                Constants["ev_global_gesture_drag_end"] = 68.0;
                Constants["ev_global_gesture_flick"] = 69.0;
                Constants["ev_global_gesture_pinch_start"] = 70.0;
                Constants["ev_global_gesture_pinch_in"] = 71.0;
                Constants["ev_global_gesture_pinch_out"] = 72.0;
                Constants["ev_global_gesture_pinch_end"] = 73.0;
                Constants["ev_global_gesture_rotate_start"] = 74.0;
                Constants["ev_global_gesture_rotating"] = 75.0;
                Constants["ev_global_gesture_rotate_end"] = 76.0;
            }
            Constants["ty_real"] = 0.0;
            Constants["ty_string"] = 1.0;
            Constants["dll_cdecl"] = 0.0;
            Constants["dll_stdcall"] = 1.0;
            Constants["fa_readonly"] = 1.0;
            Constants["fa_hidden"] = 2.0;
            Constants["fa_sysfile"] = 4.0;
            Constants["fa_volumeid"] = 8.0;
            Constants["fa_directory"] = 16.0;
            Constants["fa_archive"] = 32.0;
            Constants["cr_default"] = 0.0;
            Constants["cr_none"] = -1.0;
            Constants["cr_arrow"] = -2.0;
            Constants["cr_cross"] = -3.0;
            Constants["cr_beam"] = -4.0;
            Constants["cr_size_nesw"] = -6.0;
            Constants["cr_size_ns"] = -7.0;
            Constants["cr_size_nwse"] = -8.0;
            Constants["cr_size_we"] = -9.0;
            Constants["cr_uparrow"] = -10.0;
            Constants["cr_hourglass"] = -11.0;
            Constants["cr_drag"] = -12.0;
            Constants["cr_appstart"] = -19.0;
            Constants["cr_handpoint"] = -21.0;
            Constants["cr_size_all"] = -22.0;
            Constants["pt_shape_pixel"] = 0.0;
            Constants["pt_shape_disk"] = 1.0;
            Constants["pt_shape_square"] = 2.0;
            Constants["pt_shape_line"] = 3.0;
            Constants["pt_shape_star"] = 4.0;
            Constants["pt_shape_circle"] = 5.0;
            Constants["pt_shape_ring"] = 6.0;
            Constants["pt_shape_sphere"] = 7.0;
            Constants["pt_shape_flare"] = 8.0;
            Constants["pt_shape_spark"] = 9.0;
            Constants["pt_shape_explosion"] = 10.0;
            Constants["pt_shape_cloud"] = 11.0;
            Constants["pt_shape_smoke"] = 12.0;
            Constants["pt_shape_snow"] = 13.0;
            Constants["ps_distr_linear"] = 0.0;
            Constants["ps_distr_gaussian"] = 1.0;
            Constants["ps_distr_invgaussian"] = 2.0;
            Constants["ps_shape_rectangle"] = 0.0;
            Constants["ps_shape_ellipse"] = 1.0;
            Constants["ps_shape_diamond"] = 2.0;
            Constants["ps_shape_line"] = 3.0;
            Constants["ps_force_constant"] = 0.0;
            Constants["ps_force_linear"] = 1.0;
            Constants["ps_force_quadratic"] = 2.0;
            Constants["ps_deflect_vertical"] = 0.0;
            Constants["ps_deflect_horizontal"] = 1.0;
            Constants["ps_change_all"] = 0.0;
            Constants["ps_change_shape"] = 1.0;
            Constants["ps_change_motion"] = 2.0;
            Constants["ef_explosion"] = 0.0;
            Constants["ef_ring"] = 1.0;
            Constants["ef_ellipse"] = 2.0;
            Constants["ef_firework"] = 3.0;
            Constants["ef_smoke"] = 4.0;
            Constants["ef_smokeup"] = 5.0;
            Constants["ef_star"] = 6.0;
            Constants["ef_spark"] = 7.0;
            Constants["ef_flare"] = 8.0;
            Constants["ef_cloud"] = 9.0;
            Constants["ef_rain"] = 10.0;
            Constants["ef_snow"] = 11.0;
            Constants["display_landscape"] = 0.0;
            Constants["display_portrait"] = 1.0;
            Constants["display_landscape_flipped"] = 2.0;
            Constants["display_portrait_flipped"] = 3.0;
            Constants["os_unknown"] = -1.0;
            Constants["os_win32"] = 0.0;
            Constants["os_windows"] = 0.0;
            Constants["os_macosx"] = 1.0;
            if (data?.GeneralInfo?.Major < 2)
            {
                Constants["os_psp"] = 2.0;
            }
            Constants["os_ios"] = 3.0;
            Constants["os_android"] = 4.0;
            Constants["os_symbian"] = 5.0;
            Constants["os_linux"] = 6.0;
            Constants["os_winphone"] = 7.0;
            Constants["os_tizen"] = 8.0;
            Constants["os_win8native"] = 9.0;
            Constants["os_wiiu"] = 10.0;
            Constants["os_3ds"] = 11.0;
            Constants["os_psvita"] = 12.0;
            Constants["os_bb10"] = 13.0;
            Constants["os_ps4"] = 14.0;
            Constants["os_xboxone"] = 15.0;
            Constants["os_ps3"] = 16.0;
            Constants["os_xbox360"] = 17.0;
            Constants["os_uwp"] = 18.0;
            Constants["os_switch_beta"] = 20.0; // This is what NXTALE identifies itself as. It likely was an old version name(?) Unfortunately, it shares an id with tvos. However, since this tool is written for Undertale, we give it priority over tvos.
            Constants["os_tvos"] = 20.0;
            Constants["os_switch"] = 21.0;
            Constants["os_llvm_win32"] = 65536.0;
            Constants["os_llvm_macosx"] = 65537.0;
            Constants["os_llvm_psp"] = 65538.0;
            Constants["os_llvm_ios"] = 65539.0;
            Constants["os_llvm_android"] = 65540.0;
            Constants["os_llvm_symbian"] = 65541.0;
            Constants["os_llvm_linux"] = 65542.0;
            Constants["os_llvm_winphone"] = 65543.0;
            Constants["browser_not_a_browser"] = -1.0;
            Constants["browser_unknown"] = 0.0;
            Constants["browser_ie"] = 1.0;
            Constants["browser_firefox"] = 2.0;
            Constants["browser_chrome"] = 3.0;
            Constants["browser_safari"] = 4.0;
            Constants["browser_safari_mobile"] = 5.0;
            Constants["browser_opera"] = 6.0;
            Constants["browser_android_default"] = 7.0;
            Constants["browser_windows_store"] = 8.0;
            Constants["browser_tizen"] = 9.0;
            Constants["browser_ie_mobile"] = 10.0;
            Constants["browser_edge"] = 11.0;
            Constants["asset_unknown"] = -1.0;
            Constants["asset_object"] = 0.0;
            Constants["asset_sprite"] = 1.0;
            Constants["asset_sound"] = 2.0;
            Constants["asset_room"] = 3.0;
            if (data?.GeneralInfo?.Major < 2)
            {
                Constants["asset_background"] = 4.0;
            }
            else
            {
                Constants["asset_tiles"] = 9.0;
            }
            Constants["asset_path"] = 5.0;
            Constants["asset_script"] = 6.0;
            Constants["asset_font"] = 7.0;
            Constants["asset_timeline"] = 8.0;
            Constants["asset_shader"] = 10.0;
            Constants["device_ios_unknown"] = -1.0;
            Constants["device_ios_iphone"] = 0.0;
            Constants["device_ios_iphone_retina"] = 1.0;
            Constants["device_ios_ipad"] = 2.0;
            Constants["device_ios_ipad_retina"] = 3.0;
            Constants["device_ios_iphone5"] = 4.0;
            Constants["device_ios_iphone6"] = 5.0;
            Constants["device_ios_iphone6plus"] = 6.0;
            Constants["device_ios_iphone6s"] = 7.0;
            Constants["device_ios_iphone6splus"] = 8.0;
            Constants["device_emulator"] = 256.0;
            Constants["device_tablet"] = 2.0;
            Constants["of_challenge_win"] = 0.0;
            Constants["of_challenge_lose"] = 1.0;
            Constants["of_challenge_tie"] = 2.0;
            Constants["leaderboard_type_number"] = 0.0;
            Constants["leaderboard_type_time_mins_secs"] = 1.0;
            Constants["phy_joint_anchor_1_x"] = 0.0;
            Constants["phy_joint_anchor_1_y"] = 1.0;
            Constants["phy_joint_anchor_2_x"] = 2.0;
            Constants["phy_joint_anchor_2_y"] = 3.0;
            Constants["phy_joint_reaction_force_x"] = 4.0;
            Constants["phy_joint_reaction_force_y"] = 5.0;
            Constants["phy_joint_reaction_torque"] = 6.0;
            Constants["phy_joint_motor_speed"] = 7.0;
            Constants["phy_joint_angle"] = 8.0;
            Constants["phy_joint_motor_torque"] = 9.0;
            Constants["phy_joint_max_motor_torque"] = 10.0;
            Constants["phy_joint_translation"] = 11.0;
            Constants["phy_joint_speed"] = 12.0;
            Constants["phy_joint_motor_force"] = 13.0;
            Constants["phy_joint_max_motor_force"] = 14.0;
            Constants["phy_joint_length_1"] = 15.0;
            Constants["phy_joint_length_2"] = 16.0;
            Constants["phy_joint_damping_ratio"] = 17.0;
            Constants["phy_joint_frequency"] = 18.0;
            Constants["phy_joint_lower_angle_limit"] = 19.0;
            Constants["phy_joint_upper_angle_limit"] = 20.0;
            Constants["phy_joint_angle_limits"] = 21.0;
            Constants["phy_joint_max_length"] = 22.0;
            Constants["phy_joint_max_torque"] = 23.0;
            Constants["phy_joint_max_force"] = 24.0;
            Constants["phy_debug_render_shapes"] = 1.0;
            Constants["phy_debug_render_joints"] = 2.0;
            Constants["phy_debug_render_coms"] = 4.0;
            Constants["phy_debug_render_aabb"] = 8.0;
            Constants["phy_debug_render_obb"] = 16.0;
            Constants["phy_debug_render_core_shapes"] = 32.0;
            Constants["phy_debug_render_collision_pairs"] = 64.0;
            Constants["phy_particle_flag_water"] = 0.0;
            Constants["phy_particle_flag_zombie"] = 2.0;
            Constants["phy_particle_flag_wall"] = 4.0;
            Constants["phy_particle_flag_spring"] = 8.0;
            Constants["phy_particle_flag_elastic"] = 16.0;
            Constants["phy_particle_flag_viscous"] = 32.0;
            Constants["phy_particle_flag_powder"] = 64.0;
            Constants["phy_particle_flag_tensile"] = 128.0;
            Constants["phy_particle_flag_colourmixing"] = 256.0;
            Constants["phy_particle_group_flag_solid"] = 1.0;
            Constants["phy_particle_group_flag_rigid"] = 2.0;
            Constants["phy_particle_data_flag_typeflags"] = 1.0;
            Constants["phy_particle_data_flag_position"] = 2.0;
            Constants["phy_particle_data_flag_velocity"] = 4.0;
            Constants["phy_particle_data_flag_colour"] = 8.0;
            Constants["phy_particle_data_flag_category"] = 16.0;
            Constants["achievement_our_info"] = 1002.0;
            Constants["achievement_friends_info"] = 1003.0;
            Constants["achievement_leaderboard_info"] = 1004.0;
            Constants["achievement_achievement_info"] = 1005.0;
            Constants["achievement_filter_all_players"] = 0.0;
            Constants["achievement_filter_friends_only"] = 1.0;
            Constants["achievement_filter_favorites_only"] = 2.0;
            Constants["achievement_filter_friends_alt"] = 3.0;
            Constants["achievement_filter_favorites_alt"] = 4.0;
            Constants["achievement_type_achievement_challenge"] = 0.0;
            Constants["achievement_type_score_challenge"] = 1.0;
            Constants["achievement_pic_loaded"] = 1006.0;
            Constants["achievement_challenge_completed"] = 1007.0;
            Constants["achievement_challenge_completed_by_remote"] = 1008.0;
            Constants["achievement_challenge_received"] = 1009.0;
            Constants["achievement_challenge_list_received"] = 1010.0;
            Constants["achievement_challenge_launched"] = 1011.0;
            Constants["achievement_player_info"] = 1012.0;
            Constants["achievement_purchase_info"] = 1013.0;
            Constants["achievement_msg_result"] = 1014.0;
            Constants["achievement_stat_event"] = 1015.0;
            Constants["achievement_show_ui"] = 0.0;
            Constants["achievement_show_profile"] = 1.0;
            Constants["achievement_show_leaderboard"] = 2.0;
            Constants["achievement_show_achievement"] = 3.0;
            Constants["achievement_show_bank"] = 4.0;
            Constants["achievement_show_friend_picker"] = 5.0;
            Constants["achievement_show_purchase_prompt"] = 6.0;
            Constants["buffer_fixed"] = 0.0;
            Constants["buffer_grow"] = 1.0;
            Constants["buffer_wrap"] = 2.0;
            Constants["buffer_fast"] = 3.0;
            Constants["buffer_vbuffer"] = 4.0;
            Constants["buffer_network"] = 5.0;
            Constants["buffer_u8"] = 1.0;
            Constants["buffer_s8"] = 2.0;
            Constants["buffer_u16"] = 3.0;
            Constants["buffer_s16"] = 4.0;
            Constants["buffer_u32"] = 5.0;
            Constants["buffer_s32"] = 6.0;
            Constants["buffer_f16"] = 7.0;
            Constants["buffer_f32"] = 8.0;
            Constants["buffer_f64"] = 9.0;
            Constants["buffer_bool"] = 10.0;
            Constants["buffer_string"] = 11.0;
            Constants["buffer_u64"] = 12.0;
            Constants["buffer_text"] = 13.0;
            Constants["buffer_seek_start"] = 0.0;
            Constants["buffer_seek_relative"] = 1.0;
            Constants["buffer_seek_end"] = 2.0;
            Constants["buffer_surface_copy"] = 0.0;
            Constants["network_socket_tcp"] = 0.0;
            Constants["network_socket_udp"] = 1.0;
            Constants["network_socket_bluetooth"] = 2.0;
            Constants["network_socket_tcp_psn"] = 3.0;
            Constants["network_socket_udp_psn"] = 4.0;
            Constants["network_type_connect"] = 1.0;
            Constants["network_type_disconnect"] = 2.0;
            Constants["network_type_data"] = 3.0;
            Constants["network_type_non_blocking_connect"] = 4.0;
            Constants["network_config_connect_timeout"] = 0.0;
            Constants["network_config_use_non_blocking_socket"] = 1.0;
            Constants["network_config_enable_reliable_udp"] = 2.0;
            Constants["network_config_disable_reliable_udp"] = 3.0;
            Constants["network_avoid_time_wait"] = 4.0;
            Constants["ov_friends"] = 0.0;
            Constants["ov_community"] = 1.0;
            Constants["ov_players"] = 2.0;
            Constants["ov_settings"] = 3.0;
            Constants["ov_gamegroup"] = 4.0;
            Constants["ov_achievements"] = 5.0;
            Constants["lb_sort_none"] = 0.0;
            Constants["lb_sort_ascending"] = 1.0;
            Constants["lb_sort_descending"] = 2.0;
            Constants["lb_disp_none"] = 0.0;
            Constants["lb_disp_numeric"] = 1.0;
            Constants["lb_disp_time_sec"] = 2.0;
            Constants["lb_disp_time_ms"] = 3.0;
            Constants["ugc_result_success"] = 1.0;
            Constants["ugc_filetype_community"] = 0.0;
            Constants["ugc_filetype_microtrans"] = 1.0;
            Constants["ugc_visibility_public"] = 0.0;
            Constants["ugc_visibility_friends_only"] = 1.0;
            Constants["ugc_visibility_private"] = 2.0;
            Constants["ugc_query_RankedByVote"] = 0.0;
            Constants["ugc_query_RankedByPublicationDate"] = 1.0;
            Constants["ugc_query_AcceptedForGameRankedByAcceptanceDate"] = 2.0;
            Constants["ugc_query_RankedByTrend"] = 3.0;
            Constants["ugc_query_FavoritedByFriendsRankedByPublicationDate"] = 4.0;
            Constants["ugc_query_CreatedByFriendsRankedByPublicationDate"] = 5.0;
            Constants["ugc_query_RankedByNumTimesReported"] = 6.0;
            Constants["ugc_query_CreatedByFollowedUsersRankedByPublicationDate"] = 7.0;
            Constants["ugc_query_NotYetRated"] = 8.0;
            Constants["ugc_query_RankedByTotalVotesAsc"] = 9.0;
            Constants["ugc_query_RankedByVotesUp"] = 10.0;
            Constants["ugc_query_RankedByTextSearch"] = 11.0;
            Constants["ugc_sortorder_CreationOrderDesc"] = 0.0;
            Constants["ugc_sortorder_CreationOrderAsc"] = 1.0;
            Constants["ugc_sortorder_TitleAsc"] = 2.0;
            Constants["ugc_sortorder_LastUpdatedDesc"] = 3.0;
            Constants["ugc_sortorder_SubscriptionDateDesc"] = 4.0;
            Constants["ugc_sortorder_VoteScoreDesc"] = 5.0;
            Constants["ugc_sortorder_ForModeration"] = 6.0;
            Constants["ugc_list_Published"] = 0.0;
            Constants["ugc_list_VotedOn"] = 1.0;
            Constants["ugc_list_VotedUp"] = 2.0;
            Constants["ugc_list_VotedDown"] = 3.0;
            Constants["ugc_list_WillVoteLater"] = 4.0;
            Constants["ugc_list_Favorited"] = 5.0;
            Constants["ugc_list_Subscribed"] = 6.0;
            Constants["ugc_list_UsedOrPlayed"] = 7.0;
            Constants["ugc_list_Followed"] = 8.0;
            Constants["ugc_match_Items"] = 0.0;
            Constants["ugc_match_Items_Mtx"] = 1.0;
            Constants["ugc_match_Items_ReadyToUse"] = 2.0;
            Constants["ugc_match_Collections"] = 3.0;
            Constants["ugc_match_Artwork"] = 4.0;
            Constants["ugc_match_Videos"] = 5.0;
            Constants["ugc_match_Screenshots"] = 6.0;
            Constants["ugc_match_AllGuides"] = 7.0;
            Constants["ugc_match_WebGuides"] = 8.0;
            Constants["ugc_match_IntegratedGuides"] = 9.0;
            Constants["ugc_match_UsableInGame"] = 10.0;
            Constants["ugc_match_ControllerBindings"] = 11.0;
            Constants["vertex_usage_position"] = 1.0;
            Constants["vertex_usage_colour"] = 2.0;
            Constants["vertex_usage_normal"] = 3.0;
            Constants["vertex_usage_textcoord"] = 4.0;
            Constants["vertex_usage_texcoord"] = 4.0;
            Constants["vertex_usage_blendweight"] = 5.0;
            Constants["vertex_usage_blendindices"] = 6.0;
            Constants["vertex_usage_psize"] = 7.0;
            Constants["vertex_usage_tangent"] = 8.0;
            Constants["vertex_usage_binormal"] = 9.0;
            Constants["vertex_usage_fog"] = 12.0;
            Constants["vertex_usage_depth"] = 13.0;
            Constants["vertex_usage_sample"] = 14.0;
            Constants["vertex_type_float1"] = 1.0;
            Constants["vertex_type_float2"] = 2.0;
            Constants["vertex_type_float3"] = 3.0;
            Constants["vertex_type_float4"] = 4.0;
            Constants["vertex_type_colour"] = 5.0;
            Constants["vertex_type_ubyte4"] = 6.0;
            Constants["ds_type_map"] = 1.0;
            Constants["ds_type_list"] = 2.0;
            Constants["ds_type_stack"] = 3.0;
            Constants["ds_type_queue"] = 4.0;
            Constants["ds_type_grid"] = 5.0;
            Constants["ds_type_priority"] = 6.0;
            Constants["iap_ev_storeload"] = 0.0;
            Constants["iap_ev_product"] = 1.0;
            Constants["iap_ev_purchase"] = 2.0;
            Constants["iap_ev_consume"] = 3.0;
            Constants["iap_ev_restore"] = 4.0;
            Constants["iap_storeload_ok"] = 0.0;
            Constants["iap_storeload_failed"] = -1.0;
            Constants["iap_status_uninitialised"] = -2.0;
            Constants["iap_status_unavailable"] = -1.0;
            Constants["iap_status_loading"] = 0.0;
            Constants["iap_status_available"] = 1.0;
            Constants["iap_status_processing"] = 2.0;
            Constants["iap_status_restoring"] = 3.0;
            Constants["iap_failed"] = -3.0;
            Constants["iap_unavailable"] = -2.0;
            Constants["iap_available"] = -1.0;
            Constants["iap_purchased"] = 0.0;
            Constants["iap_canceled"] = 1.0;
            Constants["iap_refunded"] = 2.0;
            Constants["matrix_view"] = 0.0;
            Constants["matrix_projection"] = 1.0;
            Constants["matrix_world"] = 2.0;
            Constants["timezone_local"] = 0.0;
            Constants["timezone_utc"] = 1.0;
            Constants["gamespeed_fps"] = 0.0;
            Constants["gamespeed_microseconds"] = 1.0;
            if (data?.GeneralInfo?.Major >= 2)
            {
                Constants["spritespeed_framespersecond"] = 0.0;
                Constants["spritespeed_framespergameframe"] = 1.0;
            }
            Constants["xboxone_fileerror_noerror"] = 0.0;
            Constants["xboxone_fileerror_outofmemory"] = 1.0;
            Constants["xboxone_fileerror_usernotfound"] = 2.0;
            Constants["xboxone_fileerror_unknownerror"] = 3.0;
            Constants["xboxone_fileerror_cantopenfile"] = 4.0;
            Constants["xboxone_fileerror_blobnotfound"] = 5.0;
            Constants["xboxone_fileerror_containernotinsync"] = 6.0;
            Constants["xboxone_fileerror_containersyncfailed"] = 7.0;
            Constants["xboxone_fileerror_invalidcontainername"] = 8.0;
            Constants["xboxone_fileerror_noaccess"] = 9.0;
            Constants["xboxone_fileerror_noxboxliveinfo"] = 10.0;
            Constants["xboxone_fileerror_outoflocalstorage"] = 11.0;
            Constants["xboxone_fileerror_providedbuffertoosmall"] = 12.0;
            Constants["xboxone_fileerror_quotaexceeded"] = 13.0;
            Constants["xboxone_fileerror_updatetoobig"] = 14.0;
            Constants["xboxone_fileerror_usercanceled"] = 15.0;
            Constants["xboxone_gamerpic_small"] = 1.0;
            Constants["xboxone_gamerpic_medium"] = 2.0;
            Constants["xboxone_gamerpic_large"] = 3.0;
            Constants["xboxone_agegroup_unknown"] = 0.0;
            Constants["xboxone_agegroup_child"] = 1.0;
            Constants["xboxone_agegroup_teen"] = 2.0;
            Constants["xboxone_agegroup_adult"] = 3.0;
            Constants["xboxone_privilege_internet_browsing"] = 217.0;
            Constants["xboxone_privilege_social_network_sharing"] = 220.0;
            Constants["xboxone_privilege_share_kinect_content"] = 199.0;
            Constants["xboxone_privilege_video_communications"] = 235.0;
            Constants["xboxone_privilege_communications"] = 252.0;
            Constants["xboxone_privilege_user_created_content"] = 247.0;
            Constants["xboxone_privilege_multiplayer_sessions"] = 254.0;
            Constants["xboxone_privilege_sessions"] = 189.0;
            Constants["xboxone_privilege_fitness_upload"] = 195.0;
            Constants["xboxone_privilege_result_aborted"] = 2.0;
            Constants["xboxone_privilege_result_banned"] = 4.0;
            Constants["xboxone_privilege_result_no_issue"] = 0.0;
            Constants["xboxone_privilege_result_purchase_required"] = 1.0;
            Constants["xboxone_privilege_result_restricted"] = 8.0;
            Constants["xboxone_match_visibility_usetemplate"] = 0.0;
            Constants["xboxone_match_visibility_open"] = 1.0;
            Constants["xboxone_match_visibility_private"] = 2.0;
            Constants["xboxlive_fileerror_noerror"] = 0.0;
            Constants["xboxlive_fileerror_outofmemory"] = 1.0;
            Constants["xboxlive_fileerror_usernotfound"] = 2.0;
            Constants["xboxlive_fileerror_unknownerror"] = 3.0;
            Constants["xboxlive_fileerror_cantopenfile"] = 4.0;
            Constants["xboxlive_fileerror_blobnotfound"] = 5.0;
            Constants["xboxlive_fileerror_containernotinsync"] = 6.0;
            Constants["xboxlive_fileerror_containersyncfailed"] = 7.0;
            Constants["xboxlive_fileerror_invalidcontainername"] = 8.0;
            Constants["xboxlive_fileerror_noaccess"] = 9.0;
            Constants["xboxlive_fileerror_noxboxliveinfo"] = 10.0;
            Constants["xboxlive_fileerror_outoflocalstorage"] = 11.0;
            Constants["xboxlive_fileerror_providedbuffertoosmall"] = 12.0;
            Constants["xboxlive_fileerror_quotaexceeded"] = 13.0;
            Constants["xboxlive_fileerror_updatetoobig"] = 14.0;
            Constants["xboxlive_fileerror_usercanceled"] = 15.0;
            Constants["xboxlive_gamerpic_small"] = 1.0;
            Constants["xboxlive_gamerpic_medium"] = 2.0;
            Constants["xboxlive_gamerpic_large"] = 3.0;
            Constants["xboxlive_agegroup_unknown"] = 0.0;
            Constants["xboxlive_agegroup_child"] = 1.0;
            Constants["xboxlive_agegroup_teen"] = 2.0;
            Constants["xboxlive_agegroup_adult"] = 3.0;
            Constants["uwp_privilege_internet_browsing"] = 217.0;
            Constants["uwp_privilege_social_network_sharing"] = 220.0;
            Constants["uwp_privilege_share_kinect_content"] = 199.0;
            Constants["uwp_privilege_video_communications"] = 235.0;
            Constants["uwp_privilege_communications"] = 252.0;
            Constants["uwp_privilege_user_created_content"] = 247.0;
            Constants["uwp_privilege_multiplayer_sessions"] = 254.0;
            Constants["uwp_privilege_sessions"] = 189.0;
            Constants["uwp_privilege_fitness_upload"] = 195.0;
            Constants["uwp_privilege_result_aborted"] = 2.0;
            Constants["uwp_privilege_result_banned"] = 4.0;
            Constants["uwp_privilege_result_no_issue"] = 0.0;
            Constants["uwp_privilege_result_purchase_required"] = 1.0;
            Constants["uwp_privilege_result_restricted"] = 8.0;
            Constants["xboxlive_match_visibility_usetemplate"] = 0.0;
            Constants["xboxlive_match_visibility_open"] = 1.0;
            Constants["xboxlive_match_visibility_private"] = 2.0;
            Constants["PSN_LEADERBOARD_SCORE_MSG"] = 2001.0;
            Constants["PSN_LEADERBOARD_SCORE_RANGE_MSG"] = 2002.0;
            Constants["PSN_LEADERBOARD_FRIENDS_SCORES_MSG"] = 2003.0;
            Constants["PSN_LEADERBOARD_SCORE_POSTED_MSG"] = 2004.0;
            Constants["PSN_TROPHY_INFO_MSG"] = 102.0;
            Constants["PSN_TROPHY_UNLOCKED_MSG"] = 101.0;
            Constants["PSN_TROPHY_UNLOCK_STATE"] = 103.0;
            Constants["MATCHMAKING_CONNECTION"] = 3001.0;
            Constants["MATCHMAKING_SESSION"] = 3002.0;
            Constants["MATCHMAKING_INVITATION"] = 4001.0;
            Constants["MATCHMAKING_PLAY_TOGETHER"] = 4002.0;
            Constants["PSN_SERVICE_STATE"] = 5001.0;
            Constants["MATCHMAKING_OPERATOR_EQUAL"] = 1.0;
            Constants["MATCHMAKING_OPERATOR_NOTEQUAL"] = 2.0;
            Constants["MATCHMAKING_OPERATOR_LESSTHAN"] = 3.0;
            Constants["MATCHMAKING_OPERATOR_LESSTHANOREQUAL"] = 4.0;
            Constants["MATCHMAKING_OPERATOR_GREATERTHAN"] = 5.0;
            Constants["MATCHMAKING_OPERATOR_GREATERTHANOREQUAL"] = 6.0;
            Constants["switch_controller_joycon_holdtype_vertical"] = 0.0;
            Constants["switch_controller_joycon_holdtype_horizontal"] = 1.0;
            Constants["switch_controller_handheld"] = 1.0;
            Constants["switch_controller_pro_controller"] = 2.0;
            Constants["switch_controller_joycon_dual"] = 4.0;
            Constants["switch_controller_joycon_left"] = 8.0;
            Constants["switch_controller_joycon_right"] = 16.0;
            Constants["switch_controller_motor_single"] = 0.0;
            Constants["switch_controller_motor_left"] = 0.0;
            Constants["switch_controller_motor_right"] = 1.0;
            Constants["switch_theme_default"] = 0.0;
            Constants["switch_theme_user"] = 1.0;
            Constants["switch_theme_white"] = 2.0;
            Constants["switch_theme_black"] = 3.0;
            Constants["switch_screenshot_rotation_none"] = 0.0;
            Constants["switch_screenshot_rotation_90"] = 1.0;
            Constants["switch_screenshot_rotation_180"] = 2.0;
            Constants["switch_screenshot_rotation_270"] = 3.0;
            Constants["switch_controller_axis_x"] = 0.0;
            Constants["switch_controller_axis_y"] = 1.0;
            Constants["switch_controller_axis_z"] = 2.0;
            Constants["switch_irsensor_light_target_all"] = 0.0;
            Constants["switch_irsensor_light_target_far"] = 1.0;
            Constants["switch_irsensor_light_target_near"] = 2.0;
            Constants["switch_irsensor_light_target_none"] = 3.0;
            Constants["switch_irsensor_ambient_noise_low"] = 0.0;
            Constants["switch_irsensor_ambient_noise_middle"] = 1.0;
            Constants["switch_irsensor_ambient_noise_high"] = 2.0;
            Constants["switch_irsensor_ambient_noise_unknown"] = 3.0;
            Constants["switch_irsensor_mode_none"] = 0.0;
            Constants["switch_irsensor_mode_moment"] = 1.0;
            Constants["switch_irsensor_mode_cluster"] = 2.0;
            Constants["switch_irsensor_mode_image"] = 3.0;
            Constants["switch_irsensor_mode_hand"] = 4.0;
            Constants["switch_irsensor_moment_preprocess_binarize"] = 0.0;
            Constants["switch_irsensor_moment_preprocess_cutoff"] = 1.0;
            Constants["switch_irsensor_hand_mode_none"] = 0.0;
            Constants["switch_irsensor_hand_mode_silhouette"] = 1.0;
            Constants["switch_irsensor_hand_mode_image"] = 2.0;
            Constants["switch_irsensor_hand_mode_silhouette_and_image"] = 3.0;
            Constants["switch_irsensor_hand_mode_silhouette_only"] = 4.0;
            Constants["switch_irsensor_image_format_qvga"] = 0.0;
            Constants["switch_irsensor_image_format_qqvga"] = 1.0;
            Constants["switch_irsensor_image_format_qqqvga"] = 2.0;
            Constants["switch_irsensor_image_format_320x240"] = 0.0;
            Constants["switch_irsensor_image_format_160x120"] = 1.0;
            Constants["switch_irsensor_image_format_80x60"] = 2.0;
            Constants["switch_irsensor_image_format_40x30"] = 3.0;
            Constants["switch_irsensor_image_format_20x15"] = 4.0;
            Constants["switch_irsensor_hand_chirality_left"] = 1.0;
            Constants["switch_irsensor_hand_chirality_right"] = 2.0;
            Constants["switch_irsensor_hand_chirality_unknown"] = 3.0;
            Constants["switch_irsensor_hand_finger_thumb"] = 0.0;
            Constants["switch_irsensor_hand_finger_index"] = 1.0;
            Constants["switch_irsensor_hand_finger_middle"] = 2.0;
            Constants["switch_irsensor_hand_finger_ring"] = 3.0;
            Constants["switch_irsensor_hand_finger_little"] = 4.0;
            Constants["switch_irsensor_hand_finger_count"] = 5.0;
            Constants["switch_irsensor_hand_touching_index_middle"] = 0.0;
            Constants["switch_irsensor_hand_touching_middle_ring"] = 1.0;
            Constants["switch_irsensor_hand_touching_ring_little"] = 2.0;
            Constants["switch_irsensor_hand_touching_count"] = 3.0;
            Constants["switch_controller_handheld_activation_dual"] = 0.0;
            Constants["switch_controller_handheld_activation_single"] = 1.0;
            Constants["switch_controller_handheld_activation_none"] = 2.0;
            Constants["switch_performance_mode_invalid"] = -1.0;
            Constants["switch_performance_mode_normal"] = 0.0;
            Constants["switch_performance_mode_boost"] = 1.0;
            Constants["switch_performance_config_invalid"] = 0.0;
            Constants["switch_performance_config_Cpu1020MhzGpu768MhzEmc1600Mhz"] = 65537.0;
            Constants["switch_performance_config_Cpu1020MhzGpu307MhzEmc1331Mhz"] = 131075.0;
            Constants["switch_performance_config_Cpu1020MhzGpu384MhzEmc1331Mhz"] = 131076.0;
            Constants["fb_login_default"] = 0.0;
            Constants["fb_login_fallback_to_webview"] = 1.0;
            Constants["fb_login_no_fallback_to_webview"] = 2.0;
            Constants["fb_login_forcing_webview"] = 3.0;
            Constants["fb_login_use_system_account"] = 4.0;
            Constants["fb_login_forcing_safari"] = 5.0;
            Constants["path_action_stop"] = 0.0;
            Constants["path_action_restart"] = 1.0;
            Constants["path_action_continue"] = 2.0;
            Constants["path_action_reverse"] = 3.0;
            Constants["vbm_fast"] = 0.0;
            Constants["vbm_compatible"] = 1.0;
            Constants["vbm_most_compatible"] = 2.0;
            Constants["tm_sleep"] = 0.0;
            Constants["tm_countvsyncs"] = 1.0;
            if (data?.GeneralInfo?.Major >= 2)
            {
                Constants["layerelementtype_undefined"] = 0.0;
                Constants["layerelementtype_background"] = 1.0;
                Constants["layerelementtype_instance"] = 2.0;
                Constants["layerelementtype_oldtilemap"] = 3.0;
                Constants["layerelementtype_sprite"] = 4.0;
                Constants["layerelementtype_tilemap"] = 5.0;
                Constants["layerelementtype_particlesystem"] = 6.0;
                Constants["layerelementtype_tile"] = 7.0;
                Constants["tile_rotate"] = 1073741824.0;
                Constants["tile_flip"] = 536870912.0;
                Constants["tile_mirror"] = 268435456.0;
                Constants["tile_index_mask"] = 524287.0;
            }
            Constants["cmpfunc_never"] = 1.0;
            Constants["cmpfunc_less"] = 2.0;
            Constants["cmpfunc_equal"] = 3.0;
            Constants["cmpfunc_lessequal"] = 4.0;
            Constants["cmpfunc_greater"] = 5.0;
            Constants["cmpfunc_notequal"] = 6.0;
            Constants["cmpfunc_greaterequal"] = 7.0;
            Constants["cmpfunc_always"] = 8.0;
            Constants["cull_noculling"] = 0.0;
            Constants["cull_clockwise"] = 1.0;
            Constants["cull_counterclockwise"] = 2.0;
            Constants["lighttype_dir"] = 0.0;
            Constants["lighttype_point"] = 1.0;
            if (data?.GeneralInfo?.Major >= 2)
            {
                Constants["kbv_type_default"] = 0.0;
                Constants["kbv_type_ascii"] = 1.0;
                Constants["kbv_type_url"] = 2.0;
                Constants["kbv_type_email"] = 3.0;
                Constants["kbv_type_numbers"] = 4.0;
                Constants["kbv_type_phone"] = 5.0;
                Constants["kbv_type_phone_name"] = 6.0;
                Constants["kbv_returnkey_default"] = 0.0;
                Constants["kbv_returnkey_go"] = 1.0;
                Constants["kbv_returnkey_google"] = 2.0;
                Constants["kbv_returnkey_join"] = 3.0;
                Constants["kbv_returnkey_next"] = 4.0;
                Constants["kbv_returnkey_route"] = 5.0;
                Constants["kbv_returnkey_search"] = 6.0;
                Constants["kbv_returnkey_send"] = 7.0;
                Constants["kbv_returnkey_yahoo"] = 8.0;
                Constants["kbv_returnkey_done"] = 9.0;
                Constants["kbv_returnkey_continue"] = 10.0;
                Constants["kbv_returnkey_emergency"] = 11.0;
                Constants["kbv_autocapitalize_none"] = 0.0;
                Constants["kbv_autocapitalize_words"] = 1.0;
                Constants["kbv_autocapitalize_sentences"] = 2.0;
                Constants["kbv_autocapitalize_characters"] = 3.0;
            }
            // This one is a special case; it only exports to browser. I don't think this library supports
            // browser at all though, so we'll just assume it's -1. Wouldn't hurt anyway.
            Constants["os_browser"] = -1.0;

            // Moving on to the variables
            GlobalNotArray = new Dictionary<string, VariableInfo>();
            GlobalArray = new Dictionary<string, VariableInfo>();

            GlobalNotArray["argument_relative"] = new VariableInfo(this, true, false, null, "get_argument_relative");
            GlobalNotArray["argument_count"] = new VariableInfo(this, true, false);
            GlobalNotArray["argument"] = new VariableInfo(this, true, true);
            ArgumentID = GlobalNotArray["argument"].ID;
            GlobalNotArray["argument0"] = new VariableInfo(this, true, true);
            Argument0ID = GlobalNotArray["argument0"].ID;
            GlobalNotArray["argument1"] = new VariableInfo(this, true, true);
            GlobalNotArray["argument2"] = new VariableInfo(this, true, true);
            GlobalNotArray["argument3"] = new VariableInfo(this, true, true);
            GlobalNotArray["argument4"] = new VariableInfo(this, true, true);
            GlobalNotArray["argument5"] = new VariableInfo(this, true, true);
            GlobalNotArray["argument6"] = new VariableInfo(this, true, true);
            GlobalNotArray["argument7"] = new VariableInfo(this, true, true);
            GlobalNotArray["argument8"] = new VariableInfo(this, true, true);
            GlobalNotArray["argument9"] = new VariableInfo(this, true, true);
            GlobalNotArray["argument10"] = new VariableInfo(this, true, true);
            GlobalNotArray["argument11"] = new VariableInfo(this, true, true);
            GlobalNotArray["argument12"] = new VariableInfo(this, true, true);
            GlobalNotArray["argument13"] = new VariableInfo(this, true, true);
            GlobalNotArray["argument14"] = new VariableInfo(this, true, true);
            GlobalNotArray["argument15"] = new VariableInfo(this, true, true);
            Argument15ID = GlobalNotArray["argument15"].ID;
            GlobalNotArray["debug_mode"] = new VariableInfo(this, true, false);
            GlobalNotArray["pointer_invalid"] = new VariableInfo(this, true, false);
            GlobalNotArray["pointer_null"] = new VariableInfo(this, true, false);
            GlobalNotArray["undefined"] = new VariableInfo(this, true, false);
            if (data?.GeneralInfo?.Major >= 2)
            {
                GlobalNotArray["infinity"] = new VariableInfo(this, true, false);
                GlobalNotArray["NaN"] = new VariableInfo(this, true, false);
            }
            GlobalNotArray["room"] = new VariableInfo(this, true, true, "set_current_room", "get_current_room");
            GlobalNotArray["room_first"] = new VariableInfo(this, true, false);
            GlobalNotArray["room_last"] = new VariableInfo(this, true, false);
            GlobalNotArray["transition_kind"] = new VariableInfo(this, true, true);
            GlobalNotArray["transition_steps"] = new VariableInfo(this, true, true);
            GlobalNotArray["score"] = new VariableInfo(this, true, true);
            GlobalNotArray["lives"] = new VariableInfo(this, true, true, "set_lives_function");
            GlobalNotArray["health"] = new VariableInfo(this, true, true, "set_health_function");
            GlobalNotArray["game_id"] = new VariableInfo(this, true, false);
            GlobalNotArray["game_display_name"] = new VariableInfo(this, true, false);
            GlobalNotArray["game_project_name"] = new VariableInfo(this, true, false);
            GlobalNotArray["game_save_id"] = new VariableInfo(this, true, false);
            GlobalNotArray["working_directory"] = new VariableInfo(this, true, false);
            GlobalNotArray["temp_directory"] = new VariableInfo(this, true, false);
            GlobalNotArray["program_directory"] = new VariableInfo(this, true, false);
            GlobalNotArray["instance_count"] = new VariableInfo(this, true, false, null, "get_instance_count");
            GlobalNotArray["instance_id"] = new VariableInfo(this, true, false);
            GlobalNotArray["room_width"] = new VariableInfo(this, true, true, "set_room_width");
            GlobalNotArray["room_height"] = new VariableInfo(this, true, true, "set_room_height");
            GlobalNotArray["room_caption"] = new VariableInfo(this, true, true, "set_room_caption");
            GlobalNotArray["room_speed"] = new VariableInfo(this, true, true, "set_room_speed", "get_room_speed");
            GlobalNotArray["room_persistent"] = new VariableInfo(this, true, true, "set_room_persistent");
            GlobalNotArray["background_color"] = new VariableInfo(this, true, true, "setbackground_color", "getbackground_color");
            GlobalNotArray["background_showcolor"] = new VariableInfo(this, true, true, "setbackground_showcolor", "getbackground_showcolor");
            GlobalNotArray["background_colour"] = new VariableInfo(this, true, true, "setbackground_color", "getbackground_color");
            GlobalNotArray["background_showcolour"] = new VariableInfo(this, true, true, "setbackground_showcolor", "getbackground_showcolor");
            if (data?.GeneralInfo?.Major < 2)
            {
                GlobalArray["background_visible"] = new VariableInfo(this, true, true);
                GlobalArray["background_foreground"] = new VariableInfo(this, true, true);
                GlobalArray["background_index"] = new VariableInfo(this, true, true);
                GlobalArray["background_x"] = new VariableInfo(this, true, true);
                GlobalArray["background_y"] = new VariableInfo(this, true, true);
                GlobalArray["background_width"] = new VariableInfo(this, true, false);
                GlobalArray["background_height"] = new VariableInfo(this, true, false);
                GlobalArray["background_htiled"] = new VariableInfo(this, true, true);
                GlobalArray["background_vtiled"] = new VariableInfo(this, true, true);
                GlobalArray["background_xscale"] = new VariableInfo(this, true, true);
                GlobalArray["background_yscale"] = new VariableInfo(this, true, true);
                GlobalArray["background_hspeed"] = new VariableInfo(this, true, true);
                GlobalArray["background_vspeed"] = new VariableInfo(this, true, true);
                GlobalArray["background_blend"] = new VariableInfo(this, true, true);
                GlobalArray["background_alpha"] = new VariableInfo(this, true, true);
            }
            GlobalNotArray["view_enabled"] = new VariableInfo(this, true, true, "set_view_enable", "get_view_enable");
            GlobalNotArray["view_current"] = new VariableInfo(this, true, false);
            GlobalNotArray["view_visible"] = new VariableInfo(this, true, true);
            GlobalArray["view_xview"] = new VariableInfo(this, true, true);
            GlobalArray["view_yview"] = new VariableInfo(this, true, true);
            GlobalArray["view_wview"] = new VariableInfo(this, true, true);
            GlobalArray["view_hview"] = new VariableInfo(this, true, true);
            GlobalArray["view_angle"] = new VariableInfo(this, true, true);
            GlobalArray["view_hborder"] = new VariableInfo(this, true, true);
            GlobalArray["view_vborder"] = new VariableInfo(this, true, true);
            GlobalArray["view_hspeed"] = new VariableInfo(this, true, true);
            GlobalArray["view_vspeed"] = new VariableInfo(this, true, true);
            GlobalArray["view_object"] = new VariableInfo(this, true, true);
            GlobalArray["view_xport"] = new VariableInfo(this, true, true);
            GlobalArray["view_yport"] = new VariableInfo(this, true, true);
            GlobalArray["view_wport"] = new VariableInfo(this, true, true);
            GlobalArray["view_hport"] = new VariableInfo(this, true, true);
            GlobalArray["view_surface_id"] = new VariableInfo(this, true, true);
            GlobalArray["view_camera"] = new VariableInfo(this, true, true);
            GlobalNotArray["mouse_x"] = new VariableInfo(this, true, false);
            GlobalNotArray["mouse_y"] = new VariableInfo(this, true, false);
            GlobalNotArray["mouse_button"] = new VariableInfo(this, true, true);
            GlobalNotArray["mouse_lastbutton"] = new VariableInfo(this, true, true);
            GlobalNotArray["keyboard_key"] = new VariableInfo(this, true, true);
            GlobalNotArray["keyboard_lastkey"] = new VariableInfo(this, true, true);
            GlobalNotArray["keyboard_lastchar"] = new VariableInfo(this, true, true);
            GlobalNotArray["keyboard_string"] = new VariableInfo(this, true, true);
            GlobalNotArray["show_score"] = new VariableInfo(this, true, true);
            GlobalNotArray["show_lives"] = new VariableInfo(this, true, true);
            GlobalNotArray["show_health"] = new VariableInfo(this, true, true);
            GlobalNotArray["caption_score"] = new VariableInfo(this, true, true);
            GlobalNotArray["caption_lives"] = new VariableInfo(this, true, true);
            GlobalNotArray["caption_health"] = new VariableInfo(this, true, true);
            GlobalNotArray["fps"] = new VariableInfo(this, true, false);
            GlobalNotArray["fps_real"] = new VariableInfo(this, true, false);
            GlobalNotArray["current_time"] = new VariableInfo(this, true, false, null, "get_current_time");
            GlobalNotArray["current_year"] = new VariableInfo(this, true, false, null, "get_current_year");
            GlobalNotArray["current_month"] = new VariableInfo(this, true, false, null, "get_current_month");
            GlobalNotArray["current_day"] = new VariableInfo(this, true, false, null, "get_current_day");
            GlobalNotArray["current_weekday"] = new VariableInfo(this, true, false, null, "get_current_weekday");
            GlobalNotArray["current_hour"] = new VariableInfo(this, true, false, null, "get_current_hour");
            GlobalNotArray["current_minute"] = new VariableInfo(this, true, false, null, "get_current_minute");
            GlobalNotArray["current_second"] = new VariableInfo(this, true, false, null, "get_current_second");
            GlobalNotArray["event_type"] = new VariableInfo(this, true, false, null, "get_current_event_type");
            GlobalNotArray["event_number"] = new VariableInfo(this, true, false, null, "get_current_event_number");
            GlobalNotArray["event_object"] = new VariableInfo(this, true, false, null, "get_current_event_object");
            GlobalNotArray["event_action"] = new VariableInfo(this, true, false);
            GlobalNotArray["error_occurred"] = new VariableInfo(this, true, true);
            GlobalNotArray["error_last"] = new VariableInfo(this, true, true);
            GlobalNotArray["gamemaker_registered"] = new VariableInfo(this, true, false);
            GlobalNotArray["gamemaker_pro"] = new VariableInfo(this, true, false);
            GlobalNotArray["application_surface"] = new VariableInfo(this, true, false);
            if (data?.GeneralInfo?.Major >= 2)
            {
                GlobalNotArray["font_texture_page_size"] = new VariableInfo(this, true, true);
            }
            GlobalNotArray["os_type"] = new VariableInfo(this, true, false, null, "get_os_type");
            GlobalNotArray["os_device"] = new VariableInfo(this, true, false, null, "get_os_device");
            GlobalNotArray["os_version"] = new VariableInfo(this, true, false, null, "get_os_version");
            GlobalNotArray["browser_width"] = new VariableInfo(this, true, false, null, "get_browser_width");
            GlobalNotArray["browser_height"] = new VariableInfo(this, true, false, null, "get_browser_height");
            GlobalNotArray["async_load"] = new VariableInfo(this, true, false, null, "get_async_load");
            GlobalNotArray["event_data"] = new VariableInfo(this, true, false, null, "get_event_data");
            GlobalNotArray["display_aa"] = new VariableInfo(this, true, false, null, "get_display_aa");
            GlobalNotArray["iap_data"] = new VariableInfo(this, true, false, null, "get_iap_data");
            GlobalNotArray["cursor_sprite"] = new VariableInfo(this, true, true, "set_cursor_sprite", "get_cursor_sprite");
            GlobalNotArray["delta_time"] = new VariableInfo(this, true, true, null, "get_delta_time");
            GlobalNotArray["webgl_enabled"] = new VariableInfo(this, true, false);

            // Now onto instance variables
            Instance = new Dictionary<string, VariableInfo>();
            Instance["x"] = new VariableInfo(this, true, true, "setx");
            Instance["y"] = new VariableInfo(this, true, true, "sety");
            Instance["xprevious"] = new VariableInfo(this, true, true);
            Instance["yprevious"] = new VariableInfo(this, true, true);
            Instance["xstart"] = new VariableInfo(this, true, true);
            Instance["ystart"] = new VariableInfo(this, true, true);
            Instance["hspeed"] = new VariableInfo(this, true, true, "sethspeed");
            Instance["vspeed"] = new VariableInfo(this, true, true, "setvspeed");
            Instance["direction"] = new VariableInfo(this, true, true, "setdirection");
            Instance["speed"] = new VariableInfo(this, true, true, "setspeed");
            Instance["friction"] = new VariableInfo(this, true, true);
            Instance["gravity"] = new VariableInfo(this, true, true);
            Instance["gravity_direction"] = new VariableInfo(this, true, true);
            Instance["object_index"] = new VariableInfo(this, true, false);
            Instance["id"] = new VariableInfo(this, true, false);
            Instance["alarm"] = new VariableInfo(this, true, true);
            Instance["solid"] = new VariableInfo(this, true, true);
            Instance["visible"] = new VariableInfo(this, true, true);
            Instance["persistent"] = new VariableInfo(this, true, true);
            Instance["depth"] = new VariableInfo(this, true, true, "setdepth", "getdepth");
            Instance["bbox_left"] = new VariableInfo(this, true, false, null, "get_bbox_left");
            Instance["bbox_right"] = new VariableInfo(this, true, false, null, "get_bbox_right");
            Instance["bbox_top"] = new VariableInfo(this, true, false, null, "get_bbox_top");
            Instance["bbox_bottom"] = new VariableInfo(this, true, false, null, "get_bbox_bottom");
            Instance["sprite_index"] = new VariableInfo(this, true, true, "set_sprite_index");
            Instance["image_index"] = new VariableInfo(this, true, true, "set_image_index");
            Instance["image_single"] = new VariableInfo(this, true, true, "set_image_single", "get_image_single");
            Instance["image_number"] = new VariableInfo(this, true, false, null, "get_image_number");
            Instance["sprite_width"] = new VariableInfo(this, true, false, null, "get_sprite_width");
            Instance["sprite_height"] = new VariableInfo(this, true, false, null, "get_sprite_height");
            Instance["sprite_xoffset"] = new VariableInfo(this, true, false, null, "get_sprite_xoffset");
            Instance["sprite_yoffset"] = new VariableInfo(this, true, false, null, "get_sprite_yoffset");
            Instance["image_xscale"] = new VariableInfo(this, true, true, "setxscale");
            Instance["image_yscale"] = new VariableInfo(this, true, true, "setyscale");
            Instance["image_angle"] = new VariableInfo(this, true, true, "setangle");
            Instance["image_alpha"] = new VariableInfo(this, true, true);
            Instance["image_blend"] = new VariableInfo(this, true, true, "set_imageblend", "get_imageblend");
            Instance["image_speed"] = new VariableInfo(this, true, true);
            Instance["mask_index"] = new VariableInfo(this, true, true, "set_mask_index");
            Instance["path_index"] = new VariableInfo(this, true, false);
            Instance["path_position"] = new VariableInfo(this, true, true);
            Instance["path_positionprevious"] = new VariableInfo(this, true, true);
            Instance["path_speed"] = new VariableInfo(this, true, true);
            Instance["path_scale"] = new VariableInfo(this, true, true);
            Instance["path_orientation"] = new VariableInfo(this, true, true);
            Instance["path_endaction"] = new VariableInfo(this, true, true);
            Instance["timeline_index"] = new VariableInfo(this, true, true);
            Instance["timeline_position"] = new VariableInfo(this, true, true);
            Instance["timeline_speed"] = new VariableInfo(this, true, true);
            Instance["timeline_running"] = new VariableInfo(this, true, true, "set_timeline_running", "get_timeline_running");
            Instance["timeline_loop"] = new VariableInfo(this, true, true, "set_timeline_loop", "get_timeline_loop");
            Instance["phy_rotation"] = new VariableInfo(this, true, true, "set_physics_rotation");
            Instance["phy_position_x"] = new VariableInfo(this, true, true, "set_physics_position_x");
            Instance["phy_position_y"] = new VariableInfo(this, true, true, "set_physics_position_y");
            Instance["phy_angular_velocity"] = new VariableInfo(this, true, true, "set_physics_omega");
            Instance["phy_linear_velocity_x"] = new VariableInfo(this, true, true, "set_physics_linear_velocity_x");
            Instance["phy_linear_velocity_y"] = new VariableInfo(this, true, true, "set_physics_linear_velocity_y");
            Instance["phy_speed_x"] = new VariableInfo(this, true, true, "set_physics_speed_x");
            Instance["phy_speed_y"] = new VariableInfo(this, true, true, "set_physics_speed_y");
            Instance["phy_speed"] = new VariableInfo(this, true, false);
            Instance["phy_angular_damping"] = new VariableInfo(this, true, true, "set_physics_angular_damping");
            Instance["phy_linear_damping"] = new VariableInfo(this, true, true, "set_physics_linear_damping");
            Instance["phy_bullet"] = new VariableInfo(this, true, true, "set_physics_bullet");
            Instance["phy_fixed_rotation"] = new VariableInfo(this, true, true, "set_physics_fixed_rotation");
            Instance["phy_active"] = new VariableInfo(this, true, true, "set_physics_active");
            Instance["phy_mass"] = new VariableInfo(this, true, false);
            Instance["phy_inertia"] = new VariableInfo(this, true, false);
            Instance["phy_com_x"] = new VariableInfo(this, true, false);
            Instance["phy_com_y"] = new VariableInfo(this, true, false);
            Instance["phy_dynamic"] = new VariableInfo(this, true, false);
            Instance["phy_kinematic"] = new VariableInfo(this, true, false);
            Instance["phy_sleeping"] = new VariableInfo(this, true, false);
            Instance["phy_position_xprevious"] = new VariableInfo(this, true, true);
            Instance["phy_position_yprevious"] = new VariableInfo(this, true, true);
            Instance["phy_collision_points"] = new VariableInfo(this, true, false);

            // There are some of them that are only available in certain physics events
            InstanceLimitedEvent = new Dictionary<string, VariableInfo>();
            InstanceLimitedEvent["phy_collision_x"] = new VariableInfo(this, true, false);
            InstanceLimitedEvent["phy_collision_y"] = new VariableInfo(this, true, false);
            InstanceLimitedEvent["phy_col_normal_x"] = new VariableInfo(this, true, false);
            InstanceLimitedEvent["phy_col_normal_y"] = new VariableInfo(this, true, false);

            // Accessors
            Accessors1D = new Dictionary<Compiler.Lexer.Token.TokenKind, AccessorInfo>();
            Accessors1D[Compiler.Lexer.Token.TokenKind.OpenArrayMap] = new AccessorInfo("ds_map_set", "ds_map_set_pre", "ds_map_set_post", "ds_map_find_value");
            Accessors1D[Compiler.Lexer.Token.TokenKind.OpenArrayList] = new AccessorInfo("ds_list_set", "ds_list_set_pre", "ds_list_set_post", "ds_list_find_value");
            Accessors1D[Compiler.Lexer.Token.TokenKind.OpenArrayBaseArray] = new AccessorInfo("array_set", "array_set_pre", "array_set_post", "array_get");

            Accessors2D = new Dictionary<Compiler.Lexer.Token.TokenKind, AccessorInfo>();
            Accessors2D[Compiler.Lexer.Token.TokenKind.OpenArrayGrid] = new AccessorInfo("ds_grid_set", "ds_grid_set_pre", "ds_grid_set_post", "ds_grid_get");
            Accessors2D[Compiler.Lexer.Token.TokenKind.OpenArrayBaseArray] = new AccessorInfo("array_set_2D", "array_set_2D_pre", "array_set_2D_post", "array_get_2D");
        }
    }
}
